2026-10-02 17:19:34 -04:00
|
|
|
---
|
|
|
|
|
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"
|
2026-10-14 15:52:02 -04:00
|
|
|
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 }
|
2026-10-02 17:19:34 -04:00
|
|
|
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
|
|
|
|
|
```
|