题目描述
思路解析动画文字版
下面 9 步动画会按主解代码推进,而不是泛泛讲题型。
1. 读入数组:判断是否存在下标 i 小于 j 小于 k 使 nums[i] 小于 nums[j] 小于 nums[k]。维护两个最小值 first、second,贪心扫一遍。例 [2,1,5,0,4,6]。
2. 初始化 first,second:first 记到目前最小值,second 记『前面存在比它小的数』的次小值。两者都先设成 +∞。
3. x=2:x=2 不大于 first(∞),更新 first=2。
4. x=1:x=1 不大于 first(2),更新 first=1。还没有 second。
5. x=5:x=5 比 first(1) 大、不大于 second(∞),更新 second=5。此刻已有一对 first=1 小于 second=5。
6. x=0(关键):x=0 不大于 first(1),更新 first=0。关键:second 仍是 5,它记得『之前出现过比 5 小的数』,所以这对递增关系没有丢。
7. x=4:x=4 比 first(0) 大、不大于 second(5),更新 second=4。现在 first=0 小于 second=4。
8. x=6 → 命中:x=6 比 first(0) 和 second(4) 都大,找到了第三个数,存在递增三元组,返回 True。
9. 答案 = true:返回 true。一趟扫描、两个变量,时间 O(n)、空间 O(1)。
记住这题的代码骨架:题意约束先落到状态变量,再用循环或递归维护它。
参考代码
class Solution: def increasingTriplet(self, nums): first = float('inf') second = float('inf') for x in nums: if x <= first: first = x elif x <= second: second = x else: return True return False复杂度
- 时间复杂度:O(n),扫描一次
- 空间复杂度:O(1),两个阈值
易错点
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
摆动序列
LeetCode 376 · 中等 · 沿着 贪心套路 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题