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的个数的主要内容,如果未能解决你的问题,请参考以下文章