题目
给定一个二进制数组 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 <= 10^5
nums[i] 不是 0 就是 1.
第一次提交
(全是感情,毫无技巧)
int findMaxConsecutiveOnes(int* nums, int numsSize){
int sum=0,i,maxsum=0;
for(i=0;i<numsSize;i++){
if(nums[i]==1){
sum++;
}
else{
sum=0;
}
if(sum>maxsum){
maxsum=sum;
}
}
return maxsum;
}
第二次提交
(参考官方答案,用fmax函数取代自己写的if判断取大值,执行用时显著下降)
int findMaxConsecutiveOnes(int* nums, int numsSize){
int sum=0,i,maxsum=0;
for(i=0;i<numsSize;i++){
if(nums[i]==1){
sum++;
}
else{
sum=0;
}
maxsum=fmax(sum,maxsum);
}
return maxsum;
}
第三次提交
(个人觉得没什么必要)
int findMaxConsecutiveOnes(int* nums, int numsSize){
int sum=0,i,maxsum=0;
for(i=0;i<numsSize;i++){
if(nums[i]==1){
sum++;
}
else{
maxsum=fmax(sum,maxsum);
sum=0;
}
maxsum=fmax(sum,maxsum);
}
return maxsum;
}
提交结果
碎碎念
这个题目比较简单,方法也很直白,基本上大家都是直接遍历,时间空间复杂度本身就不高,没什么优化必要了。
评论里“vanshaw”大佬说可以把它变成字符串然后用"0"去切分,然后比字串长度,我当时一看到这个想法就觉得好哇塞,眼前一亮!不过这个用python方便,C语言要实现就很麻烦了。