← 题库
中等滑动窗口前缀和数组

PROBLEM / 研究生阶段

1004. 最大连续1的个数 III

给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k0 ,则返回执行操作后 数组中连续 1 的最大个数

示例 1:

输入: nums = 1,1,1,0,0,0,1,1,1,1,0, K = 2 输出: 6 解释: 1,1,1,0,0,1,1,1,1,1,1 粗体数字从 0 翻转到 1,最长的子数组长度为 6。

示例 2:

输入: nums = 0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1, K = 3 输出: 10 解释: 0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1 粗体数字从 0 翻转到 1,最长的子数组长度为 10。

提示:

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

参考解法

下面保留的是原始练习仓库中的个人作答,可在右侧工作台中独立重写,再按需揭示对照。

python

class Solution(object):
    def longestOnes(self, nums, k):
        count0 = 0
        max_len = 0
        left = 0
        for right in range(len(nums)):
            if nums[right] == 0:  # 右指针遇到0
                count0 += 1
            
            while count0 > k:  # 数量超过k收缩左指针
                if nums[left] == 0:
                    count0 -= 1
                left += 1
            current_len = right - left + 1
            max_len = max(max_len, current_len)
        return max_len
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
这道题暂未附参考解法,编辑器草稿仍会自动保存在本机。
YOUR SOLUTION1004. 最大连续1的个数 III