题目要求:
给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
示例 1: 输入:nums = [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
示例 2: 输入:nums = [1,0,1,1,0,1] 输出:2
解题思路
第一种思路:遍历比较 遍历比较
- 定义maxNum和tempNum变量用于存储最大连续1的个数和当前连续1的个数
- 遍历nums数字,如果是连续的1,tempNum+1
- 比较tempNum和maxNum,如果tempNum>maxNum,则将tempNum的值赋给maxNum
- 返回maxNum
代码如下:
func findMaxConsecutiveOnes(nums []int) int {
// 遍历比较
// 定义maxNum和tempNum变量用于存储最大连续1的个数和当前连续1的个数
// 遍历nums数字,如果是连续的1,tempNum+1
// 比较tempNum和maxNum,如果tempNum>maxNum,则将tempNum的值赋给maxNum
// 返回maxNum
maxNum, tempNum := 0, 0
for _, v := range nums {
if v == 1 {
tempNum++
} else {
tempNum = 0
}
if tempNum > maxNum {
maxNum = tempNum
}
}
return maxNum
}
第二种思路:双指针 定义返回结果maxNum,使用双指针标记连续1的个数,比较maxNum和双指针之间的差值,取大值
代码如下:
func findMaxConsecutiveOnes(nums []int) int {
// 双指针解法
// 定义返回结果maxNum,使用双指针标记连续1的个数,比较maxNum和双指针之间的差值,取大值
maxNum, l, r := 0, 0, 0
for r < len(nums) {
if nums[r] == 1 {
r++
maxNum = max(maxNum, r-l)
} else {
r++
l = r
}
}
return maxNum
}
func max(a, b int) int {
if a > b {
return a
}
return b
}