每周一题:最大连续1的个数

Posted 沈卢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每周一题:最大连续1的个数相关的知识,希望对你有一定的参考价值。

题目:

给定一个二进制数组, 计算其中最大连续1的个数。

示例 1:

输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
注意:

输入的数组只包含 0 和1。
输入数组的长度是正整数,且不超过 10,000。

 通过率:

题解代码:

var findMaxConsecutiveOnes = function(nums) {
    let arr=nums.join("");
    arr=arr.split(\'0\');
    let i=0;
    for(let j=0;j<arr.length;j++){
        if(arr[j].length>i){
            i=arr[j].length;
        }
    }
    return i;
};
 
思路:
  我们要思考,该如何拿到每段连续数字1的长度?所以我想到了将数组进行分割,以数字0为分界点,将每段一单独保存起来。
  首先建立空数组用来存放改动过后的数组,join()方法用于把数组中的所有元素放入一个字符串,元素是通过指定的分隔符进行分隔的。在这里我们不用任何分隔符进行分割,所以假如nums=[1,1,0,1,0,1],那么使用join()方法得到的就是字符串[110101],然后用split()用于把一个字符串分割成字符串数组。括号里面填0代表以0为分界线分割字符串,如刚刚我们得到的字符串[110101]经过split方法后得到的就是字符串数组["11","1","1"],接着我们再比较每个字符串的长度,找出最长的那个字符串输出它的长度就可以了。
 
这次代码运行的结果并不太理想,虽然对于我个人来讲这是一种很好的分割求值办法,但从测试结果可以看出,我的所耗用时是在太长,可以说这次题目完成的并不算好。
那么除了这种方法外,还有没有别的解法?当然,但是我在官方题解里看了一圈并没有找到关于js比较合适、比较有效率的解法。
可以对数组用一次遍历,使用一个计数器 count 记录 1 的数量,另一个计数器 maxCount 记录当前最大的 1 的数量。当我们遇到 1 时,count 加一。当我们遇到 0 时:将 count 与 maxCount 比较,maxCoiunt 记录较大值。将 count 设为 0。最后返回 maxCount。和我的代码看起来思路使一样的。

以上是关于每周一题:最大连续1的个数的主要内容,如果未能解决你的问题,请参考以下文章

线段树区间异或+区间和并+查询最区间大连续1的个数

2016 ICPC大连站---F题 Detachment

算法千题案例⚡️每日LeetCode打卡⚡️——59.最大连续 1 的个数

华为OJ084-求最大连续bit数

leetcode-连续子数组的最大和-53

LeetCode #485 最大连续 1 的个数