题目描述
思路解析动画文字版
记住这套「比前一个大就 cur+1,否则 cur 归 1,每步刷新 best」,下面每一帧都在套它。
开局:第 0 个元素 1 自己就是一段长度 1 的递增段(绿色),cur=1,best=1。
看第 1 个 3,和前一个 1 比。绿色是目前正在生长的递增段(长度 1)。
3 比 1 大,段接着长,cur=2。比旧的 best 更长,刷新 best=2。
看第 2 个 5,和前一个 3 比。绿色是目前正在生长的递增段(长度 2)。
5 比 3 大,段接着长,cur=3。比旧的 best 更长,刷新 best=3。
看第 3 个 2,和前一个 5 比。绿色是目前正在生长的递增段(长度 3)。
2 不大于 5(断开),绿色段缩回从第 3 个重新开始,cur 归 1。best 仍是 3。
看第 4 个 4,和前一个 2 比。绿色是目前正在生长的递增段(长度 1)。
4 比 2 大,段接着长,cur=2。还没超过 best=3,best 不变。
看第 5 个 6,和前一个 4 比。绿色是目前正在生长的递增段(长度 2)。
6 比 4 大,段接着长,cur=3。还没超过 best=3,best 不变。
看第 6 个 8,和前一个 6 比。绿色是目前正在生长的递增段(长度 3)。
8 比 6 大,段接着长,cur=4。比旧的 best 更长,刷新 best=4。
看第 7 个 9,和前一个 8 比。绿色是目前正在生长的递增段(长度 4)。
9 比 8 大,段接着长,cur=5。比旧的 best 更长,刷新 best=5。
看第 8 个 3,和前一个 9 比。绿色是目前正在生长的递增段(长度 5)。
3 不大于 9(断开),绿色段缩回从第 8 个重新开始,cur 归 1。best 仍是 5。
看第 9 个 5,和前一个 3 比。绿色是目前正在生长的递增段(长度 1)。
5 比 3 大,段接着长,cur=2。还没超过 best=5,best 不变。
看第 10 个 7,和前一个 5 比。绿色是目前正在生长的递增段(长度 2)。
7 比 5 大,段接着长,cur=3。还没超过 best=5,best 不变。
看第 11 个 2,和前一个 7 比。绿色是目前正在生长的递增段(长度 3)。
2 不大于 7(断开),绿色段缩回从第 11 个重新开始,cur 归 1。best 仍是 5。
扫完全程,最长的一段是绿色这 5 个(2→4→6→8→9),答案 5。其余灰掉的段都更短。
边界先想清:空为 0、单个为 1、全降为 1。
两个高频追问,重点区分「连续」与「可跳」。
参考代码
from typing import Listclass Solution: def findLengthOfLCIS(self, nums: List[int]) -> int: if not nums: return 0 best = cur = 1 for i in range(1, len(nums)): if nums[i] > nums[i - 1]: cur += 1 else: cur = 1 best = max(best, cur) return best复杂度
- 时间:O(n),从头到尾扫一遍
- 空间:O(1),只用 cur、best 两个变量
易错点
面试追问把动画讲成自己的话
追问和「最长递增子序列 LIS(LC300)」有什么区别?
追问能否一边扫一边记录最长段的起止位置?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
验证回文串 II
LeetCode 680 · 简单 · 沿着 双指针套路 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题