--- title: '1004. Max Consecutive Ones III' description: Given a binary array nums and an integer k, return the maximum number of consecutive 1's in the array if you can flip at most k 0's icon: dot topics: - { name: "Array", slug: "array" } - { name: "Binary Search", slug: "binary-search" } - { name: "Sliding Window", slug: "sliding-window" } - { name: "Prefix Sum", slug: "prefix-sum" } issue: "https://github.com/prdlk/leetcode/issues/56" companies: - { name: "EPAM Systems", period: "Thirty Days", frequency: 89.8 } - { name: "Meta", period: "Thirty Days", frequency: 53.8 } - { name: "Amazon", period: "Thirty Days", frequency: 39.1 } - { name: "Tekion", period: "Three Months", frequency: 100 } - { name: "DE Shaw", period: "Three Months", frequency: 80.2 } - { name: "Google", period: "Three Months", frequency: 38.7 } - { name: "Infosys", period: "Six Months", frequency: 67.9 } - { name: "Yandex", period: "Six Months", frequency: 59.6 } - { name: "LinkedIn", period: "Six Months", frequency: 54.1 } - { name: "Microsoft", period: "Six Months", frequency: 42.5 } sidebar: label: 'Max Consecutive Ones III' badge: 'Medium' --- ### Example 1: - Input: `nums = [1,1,1,0,0,0,1,1,1,1,0], k = 2` - Output: `6` - Explanation: `[1,1,1,0,0,1,1,1,1,1,1]` Bolded numbers were flipped from `0` to `1`. The longest subarray is underlined. ### Example 2: - Input: `nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], k = 3` - Output: `10` - Explanation: `[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]` Bolded numbers were flipped from `0` to `1`. The longest subarray is underlined. ### Constraints: - `1 <= nums.length <= 10^5` - `nums[i]` is either 0 or 1. - `0 <= k <= nums.length` ## Solution ```py class Solution: def longestOnes(self, nums: list[int], k: int) -> int: left = 0 cur = 0 ans = 0 for right in range(len(nums)): if nums[right] == 0: cur += 1 while cur > k: if nums[left] == 0: cur -= 1 left += 1 ans = max(ans, right - left + 1) return ans ```