485. Max Consecutive Ones*
https://leetcode.com/problems/max-consecutive-ones/description/
题目描述
Given a binary array, find the maximum number of consecutive 1s in this array.
Example 1:
Input: [1,1,0,1,1,1]
Output: 3
Explanation: The first two digits or the last three digits are consecutive 1s.
The maximum number of consecutive 1s is 3.
Note:
- The input array will only contain
0
and1
. - The length of input array is a positive integer and will not exceed
10,000
解题思路
思路 1: 遍历数组, 如果遇到的是 1
, 那么计数器加 1; 否则将计数器清零.
思路 2: 统计 nums[i...j]
范围内的 1
的个数.
C++ 实现 1
思路 1.
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int ans = 0;
int cnt = 0;
int n = nums.size();
for(int i=0; i<n; i++){
if (nums[i] == 0){
ans = max(ans, cnt);
cnt = 0;
}
else cnt++;
}
return max(cnt, ans);
}
};
C++ 实现 2
思路 2.
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int res = 0;
int i = 0, j = 0;
while (i < nums.size()) {
while (i < nums.size() && nums[i] == 0) ++ i;
j = i;
while (j < nums.size() && nums[j] == 1) ++ j;
res = std::max(res, j - i);
i = j + 1;
}
return res;
}
};
C++ 实现 3
使用 [i, j]
来标识只包含 1
的连续子数组的范围. 如果当前访问的元素(其中 j + 1
表示当前访问的元素)是 1, 那么 j++
, 否则, i = ++j + 1
;
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int i = 0, j = -1;
int res = 0;
while (i < nums.size()) {
if (nums[j + 1] == 1)
j ++;
else {
res = max(res, j - i + 1);
i = ++j + 1;
}
}
return res;
}
};