📅  最后修改于: 2023-12-03 14:51:42.082000             🧑  作者: Mango
在给定一个包含 n 个正整数的数组 nums 中,找出是否存在长度为 3 的递增子序列。
例如,给定 nums = [1, 2, 3, 4, 5],则存在长度为 3 的递增子序列 [1, 2, 3]。
现在要求寻找大小为 3 的递增子序列的最大乘积,即对于数组 nums,返回最大的 a[i] * a[j] * a[k],其中 0 ≤ i < j < k < n。
为了寻找大小为 3 的递增子序列的最大乘积,我们可以遍历整个数组 nums,并在遍历的过程中维护两个值,即第一小、第二小、和第三小的值。
具体来说,我们用 three_max 表示到当前位置为止所有递增子序列末尾元素中的最大值,two_max 表示到当前位置为止所有长度为 2 的递增子序列末尾元素中的最大值,one_min 表示到当前位置为止所有长度为 1 的递增子序列末尾元素中的最小值。
在遍历过程中,对于元素 nums[i],我们更新 three_max、two_max 和 one_min 的值,如下所示:
最后,如果找到了大小为 3 的递增子序列,我们返回 three_max * two_max * one_min,否则返回空值。
def max_product(nums: List[int]) -> int:
one_min = two_max = three_max = float('-inf')
for num in nums:
if num > three_max:
one_min, two_max, three_max = two_max, three_max, num
elif two_max < num <= three_max:
one_min, two_max = two_max, num
elif one_min < num <= two_max:
one_min = num
else:
pass
return three_max * two_max * one_min if one_min != float('-inf') else 0