算法题Day7-最大连续1的个数

给定一个二进制数组, 计算其中最大连续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

我还奇怪呢…是不是函数错了?!
然后我就去翻书了……

sort()函数解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值