leetcode485. 最大连续 1 的个数

  • 题目描述
  • 解题思路
  • 执行结果
leetcode 485. 最大连续 1 的个数


题目描述

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

示例 1:

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

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

提示:

1 <= nums.length <= 105 nums[i] 不是 0 就是 1.

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/max-consecutive-ones 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

法1

双指针法:
我们可以将这个题理解为由0将1分成几组,我们只需要找到最长的那一组就可以了

  1. 申请两个指针,i,j一个指向这一组第一个1的位置,寻找这一组结束的位置,i后第一个0的位置
  2. 计算两者的差值(就是这一组1的长度),
  3. i=j然后继续向后搜索其他组的长度找到最长的那一组
  • 时间复杂度(O(n))
  • 空间复杂度(O(1))

执行结果

法1

func findMaxConsecutiveOnes(nums []int) (r int) {
 for i, j := 01; i < len(nums); i++ {
  if nums[i] == 1 {//首个1
   j = i + 1
   for j < len(nums) {
    if nums[j] == 1 {
     j++
    } else {//找0出现的位置
     break
    }
   }
   if j-i > r {//计算长度,如果大于就赋值
    r = j - i
   }
   i = j
  } 
 }
 return
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 32 ms , 在所有 Go 提交中击败了 71.79% 的用户 内存消耗: 6.5 MB , 在所有 Go 提交中击败了 52.50% 的用户 通过测试用例: 42 / 42 炫耀一下:

法2


法3


本文由 mdnice 多平台发布

你可能感兴趣的:(后端)