给定一个二进制数组 nums
(nums不是1就是0), 计算其中最大连续 1
的个数。
例如:
输入:nums=[ 1,1,0,1,1,1 ]
输出:3
首端两位和末尾三位都是连续1,所以最大连续1的个数为3
思路:
定义一个变量count,遍历数组,如果当前元素为1,则m自增1,如果当前元素为0,用count的较大值替换count的较小值,并且使count归零,重新计数。遍历结束后,因为末尾的元素可能不为0,如果不更新count的值,可能会造成结果错误,如nums=[ 1,1,0,1,1,1 ],正确结果为3,若遍历结束后,不更新count的值,会造成最终结果为2,是错误的结果。
代码如下:
int compare(int a,int b){ //比较大小,更新最大连续1的个数的值,使其永远保持较大值
if(a>b)b=a;
return b;
}
int findMaxConsecutiveOnes(int* nums, int numsSize) {
int max=0,count=0;
for(int i=0;i<numsSize;i++){
if(nums[i]==1)count++;
else{
max=compare(max,count); //更新最大连续1的个数的值
count=0;
}
}
max=compare(max,count); //防止末尾元素为1,造成输出结果错误
return max; //输出最大连续1的个数
}