题目
给定一个二进制数组 nums
, 计算其中最大连续 1
的个数。
示例1:
输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
示例2:
输入:nums = [1,0,1,1,0,1]
输出:2
提示:
- 1 <= nums.length <= 105
- nums[i] 不是 0 就是 1.
解题思路
思路提醒:双指针(快指针和慢指针)
思路细节:
- 定义两个指针,例如fast和slow(fast用于记录目前已经有几个连续的1,slow用来记录最终需要输出的个数)
- 将两个指针都置于数组开头,也就是令
fast = 0,slow = 0
- 快指针依次遍历整个数组,每前进一个位置,快指针的值+1,
什么时候要采取操作呢?
- 当快指针一旦遇到
等于0
的数字时候,这时要采取操作:将慢指针的值储存为此时快指针和慢指针中的最大值slow = max(slow,fast);
然后将快指针的值再次置0. - 当完成循环时候,将慢指针的值储存为此时快指针和慢指针中的最大值
slow = max(slow,fast);
- 最后返回
slow
代码实现
c++
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int fast=0,slow = 0;
int n = nums.size();
for(int i = 0;i<n;i++){
if(nums[i]==1){
fast++;
}
else{
slow = max(slow,fast);
fast = 0;
}
}
slow = max(slow,fast);
return slow;
}
};
python
class Solution:
def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
if nums is None or len(nums)==0:
return 0
fast = 0
slow = 0
for i in range (0,len(nums)):
if(nums[i]==1):
fast = fast+1
else:
slow = max(fast,slow)
fast = 0
slow = max(fast,slow)
return slow