python-leetcode-递增的三元子序列

334. 递增的三元子序列 - 力扣(LeetCode)

使用 贪心算法 解决这个问题,只需要维护两个最小值 firstsecond,如果找到了比 second 还大的数,就说明存在递增的三元组。

代码实现

python 复制代码
def increasingTriplet(nums):
    first = second = float('inf')

    for num in nums:
        if num <= first:  
            first = num  # 更新最小值
        elif num <= second:  
            second = num  # 更新次小值
        else:  
            return True  # 找到了 third 使得 first < second < third

    return False

# 测试示例
print(increasingTriplet([1, 2, 3, 4, 5]))  # 输出: True
print(increasingTriplet([5, 4, 3, 2, 1]))  # 输出: False
print(increasingTriplet([2, 1, 5, 0, 4, 6]))  # 输出: True

思路解析

  1. 初始化 firstsecond 为正无穷大,表示目前找到的最小和次小元素。
  2. 遍历数组
    • num <= first,更新 first,表示找到了更小的数。
    • num <= second,更新 second,表示找到了更小的次小数。
    • num > second,说明已经找到了 third,满足 first < second < third,返回 True
  3. 如果遍历结束还没返回 True ,则返回 False

时间 & 空间复杂度

  • 时间复杂度:O(n)(遍历一次数组)
  • 空间复杂度:O(1)(只用了两个额外变量)

这种方法高效且不需要额外的存储空间,是最优解!

相关推荐
geats人山人海1 小时前
数据结构第六章c语言 树的存储下二叉树的概念和存储
c语言·数据结构·算法
漂流瓶jz2 小时前
UVA-12627 奇怪的气球膨胀 题解答案代码 算法竞赛入门经典第二版
算法·图论·递归·aoapc·算法竞赛入门经典·uva·12627
jarvisuni2 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
kobesdu2 小时前
流形上的优化:SO(3)与SE(3)的广义加减法在FAST-LIO中如何简化状态估计
人工智能·算法·fastlio
白狐_7982 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
乐观勇敢坚强的老彭2 小时前
C++信奥:开关门、开关灯问题
开发语言·c++·算法
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
Hi李耶3 小时前
【LeetCode】4-寻找两个正序数组的中位数
算法·leetcode·职场和发展
图灵机z3 小时前
【算法提高课】AcWing 1027. 方格取数 长期攻克提高课-day3(3/219)
算法
hans汉斯3 小时前
计算机科学与应用|改进MeanShift算法在智能监控视频中的应用研究
图像处理·人工智能·功能测试·深度学习·算法·音视频