leetcode-485. 最大连续 1 的个数

82 阅读1分钟

题目要求:

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

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

示例 2: 输入:nums = [1,0,1,1,0,1] 输出:2

链接leetcode.cn/problems/ma…

解题思路

第一种思路:遍历比较 遍历比较

  1. 定义maxNum和tempNum变量用于存储最大连续1的个数和当前连续1的个数
  2. 遍历nums数字,如果是连续的1,tempNum+1
  3. 比较tempNum和maxNum,如果tempNum>maxNum,则将tempNum的值赋给maxNum
  4. 返回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
}