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)(只用了两个额外变量)

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

相关推荐
jiayong2316 分钟前
AI架构师面试题库 - 完整汇总文档
人工智能·面试·职场和发展
用户987409238871 小时前
llamafactory 0.6.3 没有 llamafactory-cli
算法
计算机安禾1 小时前
【算法分析与设计】第26篇:参数化算法与固定参数可解性理论
大数据·人工智能·算法·机器学习·剪枝
AI科技星2 小时前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法
风筝在晴天搁浅2 小时前
美团 LeetCode 692.前K个高频单词
算法·leetcode·职场和发展
地平线开发者3 小时前
量化训练时 fusebn/withbn 简介
算法·自动驾驶
不做无法实现的梦~3 小时前
MAVLink 协议教程
linux·stm32·嵌入式硬件·算法
墨白曦煜3 小时前
算法实战笔记:剥开回溯算法的外衣——从通用模板到高阶去重(八)
笔记·算法
z200509303 小时前
今日算法(回溯子集)(模版题)
数据结构·算法·leetcode
吴佳浩3 小时前
Vibe Coding 时代,研发经理为何越来越值钱?
算法·架构