485. 最大连续1的个数

Posted 持续学习刻意练习

tags:

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

题目:

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

示例 1:

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

注意:

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

来源:力扣(LeetCode)

解题思路1:

用count(类型为整形,初始值为0)来计算连续1的次数,用result(类型为整形数组)来记录count的内容,遍历整个数组nums,如果遇到0,就将count加入到result中,并将count赋值为0;如果遇到1,count计数加一,遍历完之后,如果count大于0(计算有效的数),将count加入到result中,最后用Collections工具类计算出最大值,就是1所出现的最大连续个数。

代码1:

class Solution 
     fun findMaxConsecutiveOnes(nums: IntArray): Int 
        val result = ArrayList<Int>()
        var count = 0
        for (number in nums) when (number) 
            0 -> 
                result.add(count)
                count = 0
            
            1 -> ++count
        
        if (count > 0) result.add(count)
        return Collections.max(result)
    

解题思路2:

用current(类型为整形,初始值为0)来记录连续1的临时次数,用max(类型为整形,初始值为0)来记录连续1出现的最大次数,遍历整个数组nums,current的计算等于current加上当前数字的和再乘以当前数字,等同于遇一加一,遇零清零,如果临时次数current大于最大值max,就更新max。遍历完数组后的max就是1所出现的最大连续个数。

代码2:

fun findMaxConsecutiveOnes(nums: IntArray): Int 
        var current = 0
        var max = 0
        for (num in nums) 
            current = (current + num) * num
            if (current > max) max = current
        
        return max
    

解题思路3:

用len(类型为整形,初始值为0)记录连续1的临时次数,用maxLen(类型为整形,初始值为0)记录连续1出现的最大次数,遍历整个数组nums,如果遇到0,就比较len和maxLen的值,将两者中最大的赋值给maxLen,并将len赋值为0;如果遇到1,将len加一。最后还要比较一次len和maxLen(避免最后一位为1,len只加而未与maxLen进行比较的问题),取最大值为1所出现的最大连续次数。

代码3:

fun findMaxConsecutiveOnes(nums: IntArray): Int 
        var len = 0
        var maxLen = 0
        for (num in nums) when (num) 
            0 -> 
                maxLen = max(len, maxLen)
                len = 0
            
            1 -> ++len
        
        return max(len, maxLen)
    

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

LeetCode(485. 最大连续1的个数)

485. 最大连续1的个数

485. 最大连续1的个数

485 Max Consecutive Ones 最大连续1的个数

485. 最大连续1的个数

LeetCode_485_数组_最大连续 1 的个数