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