485. Max Consecutive Ones
Given a binary array, find the maxumum 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:
1. The input array will only contain 0 and 1.
2. The length of input array is a positive integer and will not exceed 10,000.
题目理解:
求最多连续的1的数量。
C++:
(Version_1)
class Solution{
public:
int findMaxConsecutiveOnes(vector<int>& nums){
int n=0;
std::vector<int> count;
for(int i=0;i<nums.size();i++)
{
if(nums[i]==1)
n+=1;
else
{
count.push_back(n);
n=0;
}
}
std::vector<int>::iterator biggest = std::max_element(std::begin(count), std::end(count));
return *biggest;
}
};
运行正确但是runtime error。
考虑到不需要把每次计数的值都保存下来,只需要保留最大的值,那么每次比较当前计数与之前计数最大值的大小,保留较大值。
Version_2:
class Solution{
public:
int findMaxConsecutiveOnes(vector<int>& nums){
int n=0,count=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]==1)
n+=1;
else
{
if(n>count)
count=n;
n=0;
}
}
if(n>count)
count=n;
return count;
}
};
感觉效率还是不太好,参照Top Solution.
Version_3:
class Solution{
public:
int findMaxConsecutiveOnes(vector<int>& nums){
int max=0, cur=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]&1)
{
max=max>cur?max:cur;
}
else cur=0;
}
return max;
}
};