## 1004. Max Consecutive Ones III

Given an array `A` of 0s and 1s, we may change up to `K` values from 0 to 1.

Return the length of the longest (contiguous) subarray that contains only 1s.

Example 1:

```Input: A = [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: A = [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.
```

Note:

1. `1 <= A.length <= 20000`
2. `0 <= K <= A.length`
3. `A[i]` is `0` or `1`

## Rust Solution

``````struct Solution;

impl Solution {
fn longest_ones(a: Vec<i32>, k: i32) -> i32 {
let n = a.len();
let mut sum = 0;
let mut res = 0;
let mut start = 0;
let mut end = 0;
while end < n {
if sum <= k {
if a[end] == 0 {
sum += 1;
}
end += 1;
} else {
if a[start] == 0 {
sum -= 1;
}
start += 1;
}
if sum <= k {
res = res.max(end - start);
}
}
res as i32
}
}

#[test]
fn test() {
let a = vec![1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0];
let k = 2;
let res = 6;
assert_eq!(Solution::longest_ones(a, k), res);
let a = vec![0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1];
let k = 3;
let res = 10;
assert_eq!(Solution::longest_ones(a, k), res);
let a = vec![0, 0, 0, 1];
let k = 4;
let res = 4;
assert_eq!(Solution::longest_ones(a, k), res);
}
``````

Having problems with this solution? Click here to submit an issue on github.