LC1004 最大连续1的个数三


1 题目

给定一个二进制数组 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

2 解答

滑动窗口

class Solution:
    def longestOnes(self, nums: List[int], k: int) -> int:
        n = len(nums)
        left = 0
        cont = 0# zero 's times
        ans = 0# answer

        for right , val in enumerate(nums):
            if val == 0:
                cont += 1
            while cont >k:
                if (nums[left] == 0):
                    cont -= 1
                left += 1
            ans = max(right - left + 1 , ans)
        return ans
posted @ 2025-08-27 21:09  AxonoSensei  阅读(6)  评论(0)    收藏  举报