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

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

使用 贪心算法 解决这个问题,只需要维护两个最小值 first 和 second,如果找到了比 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. 初始化 first 和 second 为正无穷大,表示目前找到的最小和次小元素。
  2. 遍历数组 :
    • 若 num <= first,更新 first,表示找到了更小的数。
    • 若 num <= second,更新 second,表示找到了更小的次小数。
    • 若 num > second,说明已经找到了 third,满足 first < second < third,返回 True。
  3. 如果遍历结束还没返回 True ,则返回 False。

时间 & 空间复杂度

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

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

相关推荐
D e re k ZH2 分钟前
保序回归:从 PAVA 到可并堆的单调约束优化
c++·算法·数据挖掘·回归·kotlin
青少儿编程课堂3 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:字典树前缀树与单词检索统计
c++·python·算法·bfs·信息学竞赛
文丑颜不良啊5 分钟前
LeetCode1401~1420题目解析
java·leetcode
Nuanyt7 分钟前
LeetCode Hot 100 链表专题2 3 题 (Java)
java·笔记·算法·leetcode·链表
文丑颜不良啊14 分钟前
LeetCode1341~1360题目解析
java·leetcode
H_BB38 分钟前
面试笔记:数据加密和心跳机制
笔记·面试·职场和发展
海绵宝宝转agent1 小时前
LeetCodehot100题解
java·笔记·学习·算法·leetcode·深度优先
青少儿编程课堂1 小时前
2026蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:堆排序与优先队列解析
c++·python·算法·bfs·信息学竞赛
SZYSK2 小时前
OpenHarmony 上读卡、推理和双屏刷新抢 CPU:核验机与消费机的调度差
物联网·算法·harmonyos·1024程序员节
Ivanqhz2 小时前
MoE + LLM 应用
数据库·人工智能·pytorch·python·深度学习·算法·1024程序员节