# LC 1004. Max Consecutive Ones III
### [Problem link](https://leetcode.com/problems/max-consecutive-ones-iii/)
###### tags: `leedcode` `medium` `python` `c++` `Sliding Window`
Given a binary array <code>nums</code> and an integer <code>k</code>, return the maximum number of consecutive <code>1</code>'s in the array if you can flip at most <code>k</code> <code>0</code>'s.
**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:**
- <code>1 <= nums.length <= 10<sup>5</sup></code>
- <code>nums[i]</code> is either <code>0</code> or <code>1</code>.
- <code>0 <= k <= nums.length</code>
## Solution 1 - Sliding Window
#### C++
```cpp=
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
int cnt0 = 0;
int ans = 0;
int l = 0;
for (int r = 0; r < nums.size(); r++) {
cnt0 += nums[r] == 0;
while (cnt0 > k) {
cnt0 -= nums[l] == 0;
l++;
}
ans = max(ans, r - l + 1);
}
return ans;
}
};
```
>### Complexity
>| | Time Complexity | Space Complexity |
>| ----------- | --------------- | ---------------- |
>| Solution 1 | O(n) | O(1) |
## Note
x