【每日一题】LeetCode 485.最大连续1的个数(数组、滑动窗口、双指针)
题目描述
给定一个二进制数组 nums
,我们需要计算其中最大连续 1
的个数。
思路分析
这个问题可以通过一次遍历来解决。我们使用两个指针 left
和 right
来表示当前考虑的子数组的边界。初始时,left
指向数组的开始,right
也指向数组的开始。我们逐步移动 right
指针,直到遇到一个 0
。每次遇到 0
,我们就更新 left
指针的位置为 right
的位置,这样我们就得到了一个连续的 1
的序列。我们记录下这个序列的长度,并与之前记录的最大长度进行比较,更新最大长度。最后,返回最大长度即可。
输入示例
-
示例 1:
- 输入:
nums = [1,1,0,1,1,1]
- 输出:
3
- 解释:开头的两位和最后的三位都是连续的
1
,所以最大连续1
的个数是3
。
- 输入:
-
示例 2:
- 输入:
nums = [1,0,1,1,0,1]
- 输出:
2
- 输入:
代码实现
java
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
// 初始化左右指针和结果变量
int right = 0;
int left = -1; // 将left初始化为-1,方便处理边界情况
int res = 0; // 用于记录最大连续1的长度
// 遍历数组
while (right < nums.length) {
// 如果当前元素是0,更新left指针
if (nums[right] == 0) {
left = right;
} else {
// 如果当前元素是1,更新最大长度
res = Math.max(res, right - left);
}
// 移动right指针
right++;
}
// 返回最大连续1的长度
return res;
}
}