中等贪心数组
PROBLEM / 研究生阶段
334. 递增的三元子序列
给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。
如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。
示例 1:
输入: nums = 1,2,3,4,5输出: true 解释: 任何 i < j < k 的三元组都满足题意
示例 2:
输入: nums = 5,4,3,2,1输出: false 解释: 不存在满足题意的三元组
示例 3:
输入: nums = 2,1,5,0,4,6输出: true 解释: 其中一个满足题意的三元组是 (1, 4, 5),因为 nums1 == 1 < nums4 == 4 < nums5 == 6
提示:
1 <= nums.length <= 5* 105-231 <= nums[i] <= 231 - 1
进阶: 你能实现时间复杂度为 O(n) ,空间复杂度为 O(1) 的解决方案吗?
参考解法
下面保留的是原始练习仓库中的个人作答,可在右侧工作台中独立重写,再按需揭示对照。
python
class Solution(object):
def increasingTriplet(self, nums):
# 维护两个变量,first和second,分别表示当前遍历到的元素之前的最小值和次小值
# 如果当前元素大于second,说明存在递增三元组,返回True
# 否则,更新first和second
first = second = float('inf')
for num in nums:
if num > second:
return True
elif num > first:
second = num
else:
first = num
return False
"""
:type nums: List[int]
:rtype: bool
"""
YOUR SOLUTION334. 递增的三元子序列