← 题库
中等贪心数组

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. 递增的三元子序列