---
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"
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
```
