目录

python-leetcode-最大连续1的个数-III

python-leetcode-最大连续1的个数 III

[1004 最大连续1的个数 III - 力扣(LeetCode)]( consecutive-ones-iii/description/?envType=study-plan-v2&envId=leetcode-75 “1004. 最大连续1的个数 III - 力扣(LeetCode)”) https://i-blog.csdnimg.cn/direct/d4b459fddd6d44e28e67c65524a9908a.png 使用滑动窗口 的方法来解决这个问题。

  1. 使用双指针(滑动窗口) ,定义左右边界 leftright
  2. 维护窗口内最多包含 k 个 0。
  3. 当窗口内的 0 超过 k 个时,移动 left 指针,缩小窗口,直到窗口内的 0 个数满足条件。
  4. 计算窗口的最大宽度,即最长连续 1 的个数。

def longestOnes(nums, k): left = 0 max_length = 0 zero_count = 0 for right in range(len(nums)): if nums[right] == 0: zero_count += 1 while zero_count > k: if nums[left] == 0: zero_count -= 1 left += 1 max_length = max(max_length, right - left + 1) return max_length

  • 时间复杂度 :O(n),其中 nn 是数组的长度,每个元素最多被访问两次(一次由 right 访问,一次由 left 访问)。
  • 空间复杂度 :O(1),仅使用了有限的额外变量。

nums = [1,1,0,0,1,1,1,0,1,1,0,1] k = 2 print(longestOnes(nums, k)) # 输出 8 这个方法通过滑动窗口高效地找到最长的连续 1 的子数组,适用于大规模数据。