题目描述
思路解析动画文字版
记住这两个变量:cur 是「现在连着几个」,best 是「历史最长几个」。遇 1 加一刷新、遇 0 归零,下面每一帧都在套它。
开始扫描前:当前连续个数 cur=0,历史最长 best=0。指针 i 还没出发。
指针 i 走到下标 0,这一格的值是 1。是 1,当前这段 1 还能接着加长。
是 1:当前连续个数 cur 加一变成 1(高亮的就是正连着的这段 1)。用它刷新历史最长,best = 1。
指针 i 走到下标 1,这一格的值是 1。是 1,当前这段 1 还能接着加长。
是 1:当前连续个数 cur 加一变成 2(高亮的就是正连着的这段 1)。用它刷新历史最长,best = 2。
指针 i 走到下标 2,这一格的值是 0。是 0,当前这段 1 到此为止,要把 cur 归零。
是 0:当前这段 1 被打断,cur 立刻归零(标红的就是这个 0)。best 不受影响,仍是 2。
指针 i 走到下标 3,这一格的值是 1。是 1,当前这段 1 还能接着加长。
是 1:当前连续个数 cur 加一变成 1(高亮的就是正连着的这段 1)。用它刷新历史最长,best = 2。
指针 i 走到下标 4,这一格的值是 1。是 1,当前这段 1 还能接着加长。
是 1:当前连续个数 cur 加一变成 2(高亮的就是正连着的这段 1)。用它刷新历史最长,best = 2。
指针 i 走到下标 5,这一格的值是 1。是 1,当前这段 1 还能接着加长。
是 1:当前连续个数 cur 加一变成 3(高亮的就是正连着的这段 1)。用它刷新历史最长,best = 3。
指针 i 走到下标 6,这一格的值是 0。是 0,当前这段 1 到此为止,要把 cur 归零。
是 0:当前这段 1 被打断,cur 立刻归零(标红的就是这个 0)。best 不受影响,仍是 3。
指针 i 走到下标 7,这一格的值是 1。是 1,当前这段 1 还能接着加长。
是 1:当前连续个数 cur 加一变成 1(高亮的就是正连着的这段 1)。用它刷新历史最长,best = 3。
指针 i 走到下标 8,这一格的值是 1。是 1,当前这段 1 还能接着加长。
是 1:当前连续个数 cur 加一变成 2(高亮的就是正连着的这段 1)。用它刷新历史最长,best = 3。
指针 i 走到下标 9,这一格的值是 1。是 1,当前这段 1 还能接着加长。
是 1:当前连续个数 cur 加一变成 3(高亮的就是正连着的这段 1)。用它刷新历史最长,best = 3。
扫到末尾,整趟里最长的一段连续 1 是高亮的这 3 个,best=3 就是最终答案。
三个高频追问:两个变量的含义、全 0 边界、以及和滑动窗口的关系。
参考代码
def findMaxConsecutiveOnes(nums): best = cur = 0 # 历史最长 / 当前连续 for x in nums: if x == 1: # 遇 1:这段加长 cur += 1 best = max(best, cur) # 顺手刷新最长 else: # 遇 0:这段断开 cur = 0 return best复杂度
- 时间:O(n),指针 i 把数组从头到尾扫一遍,每个元素只看一次
- 空间:O(1),只用 cur 和 best 两个计数器,不开额外数组
易错点
面试追问把动画讲成自己的话
追问cur 和 best 分别代表什么?
追问如果数组里全是 0,结果是多少?
追问能不能不用额外变量、原地解?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
转换成小写字母
LeetCode 709 · 简单 · 沿着 数组套路 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题