有序三元组中的最大值 I

姜智浩 Lv4

题目

给你一个下标从 0 开始的整数数组 nums 。

请你从所有满足 i < j < k 的下标三元组 (i, j, k) 中,找出并返回下标三元组的最大值。如果所有满足条件的三元组的值都是负数,则返回 0 。

下标三元组 (i, j, k) 的值等于 (nums[i] - nums[j]) * nums[k] 。

示例 1:

输入:nums = [12,6,1,2,7]
输出:77
解释:下标三元组 (0, 2, 4) 的值是 (nums[0] - nums[2]) * nums[4] = 77 。
可以证明不存在值大于 77 的有序下标三元组。

示例 2:

输入:nums = [1,10,3,4,19]
输出:133
解释:下标三元组 (1, 2, 4) 的值是 (nums[1] - nums[2]) * nums[4] = 133 。
可以证明不存在值大于 133 的有序下标三元组。

示例 3:

输入:nums = [1,2,3]
输出:0
解释:唯一的下标三元组 (0, 1, 2) 的值是一个负数,(nums[0] - nums[1]) * nums[2] = -3 。因此,答案是 0 。

解答

暴力枚举

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution(object):
def maximumTripletValue(self, nums):
n = len(nums) #把数组长度赋值给n
result = 0 #初始化result
for i in range(n): #暴力枚举 3层for循环
for j in range(i + 1,n):
for k in range(j + 1,n):
if (nums[i] - nums[j]) * nums[k] > result:
result = (nums[i] - nums[j]) * nums[k] #找出最大值
if result < 0: #判断结果是否都为负数
return 0
else:
return result

贪心

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def maximumTripletValue(self, nums: List[int]) -> int:
n = len(nums)
res, imax, dmax = 0, 0, 0
for k in range(n):
res = max(res, dmax * nums[k])
dmax = max(dmax, imax - nums[k])
imax = max(imax, nums[k])
return res

作者:力扣官方题解
链接:https://leetcode.cn/problems/maximum-value-of-an-ordered-triplet-i/solutions/3610891/you-xu-san-yuan-zu-zhong-de-zui-da-zhi-i-y6zb/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • Title: 有序三元组中的最大值 I
  • Author: 姜智浩
  • Created at : 2025-04-02 11:45:14
  • Updated at : 2025-04-02 17:33:02
  • Link: https://super-213.github.io/zhihaojiang.github.io/2025/04/02/20250402有序三元组中的最大值 I/
  • License: This work is licensed under CC BY-NC-SA 4.0.
On this page
有序三元组中的最大值 I