给定一个二进制数组, 计算其中最大连续1的个数。
示例 1:
输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
注意:
输入的数组只包含 0 和1。
输入数组的长度是正整数
,且不超过 10,000。
思路:
emmmm 其实这一题非常简单…遍历数组之后使用计数器,一旦碰到是1,就继续判断下一个数,如果还是1计数器++
我刚开始是想用数组做,记录下每一坨1的个数
最后对数组排序,直接返回最大值就完事
代码如下
var findMaxConsecutiveOnes = function(nums) {
var Couts=0;
var CoutArr=[];
for(var i=0;i<nums.length;i++){
while(nums[i]===1&&i<nums.length){
Couts++;
i++;
}
CoutArr.push(Couts);
Couts=0;
}
CoutArr.sort(function (a, b) {
return a - b;//如果b-a>0,说明b比a更大
//说明要交换位置,就执行sort函数,降序
});
return CoutArr[CoutArr.length-1];
};
但是这样emmm
对不起打扰了,,效率太低了(丢人
于是我换了一种记录的方式,不使用数组来记录
直接实时比较,只记录最大的值
类似于排序,假设当前是最大的,如果有比它更大的,就替换
最后一定要更新Couts,不更新的话会一直递增,而不是在每一坨1处有单独的计数
var findMaxConsecutiveOnes = function(nums) {
var Couts=0,MAX=0;
var i=0;
for(i;i<nums.length;i++){
while(nums[i]===1&&i<nums.length){
Couts++;
i++;
}
if(Couts>MAX){
MAX=Couts;
}
Couts=0;
}
return MAX;
};
最后运行是这样的,emmmm还行吧,不求啥了
ps
但其实在第一种思路进行时,我遇到了一个知识点的盲区
也就是sort的用法……我发现sort它……
var ar=[102,34,567,90]
ar.sort();
console.log(ar);//102 34 567 90
我还奇怪呢…是不是函数错了?!
然后我就去翻书了……