问题来源:
问题描述:
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
我的解决方案:
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int tmp=0,ret=0;
for(int i=0;i<nums.size();++i)
{
if(nums[i]==1)
{
tmp++;
ret=tmp>ret?tmp:ret;
}
else
tmp=0;
}
return ret;
}
};
思考:
此题的解法没啥好说的,用两个临时变量,一个来保存当前最大长度,一个来保存已知最大长度,一次遍历就能搞定,收录这个题有两个原因,一是刚开始写博客,用来养成一个记录的习惯,二是在这道题上犯了个小错误,值得反思
第一遍的解法如下:
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int tmp=0,ret=0;
for(int i=0;i<nums.size();++i)
{
if(nums[i]==1)
tmp++;
else
{
if(tmp>ret)
ret=tmp;
tmp=0;
}
}
return ret;
}
};
乍眼一看没啥问题,run code的简单验证也是ok的,但是没有注意边界情况,假如最后一位不是0,那么ret就没有更新,很明显ret的更新应该跟tmp的增加放在一起,写代码的时候对边界情况进行测试对于快速发现问题很有帮助