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)
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值