Problem
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.
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 either0
or1
.0 <= k <= nums.length
Solution (Java)
class Solution {
public int longestOnes(int[] a, int k) {
int result = 0;
int i = 0;
for (int j = 0; j < a.length; j++) {
if (a[j] == 0) {
k--;
}
while (k < 0) {
if (a[i] == 0) {
k++;
}
i++;
}
result = Math.max(result, j - i + 1);
}
return result;
}
}
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).