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 <= 105
nums[i]
is either0
or1
.0 <= k <= nums.length
class Solution {
public:
int longestOnes(vector<int>& A, int k) {
// base cases about k.
if (A.size() == 0) {
return 0;
}
int ans = 0;
int st = 0, end = 0;
int zeros = 0;
while (end < A.size()) {
if (A[end] == 0) {
zeros++;
}
if (zeros == k) {
ans = max(ans, end - st + 1);
}
while (zeros > k && st <= end) {
if (A[st] == 0) {
zeros--;
}
st++;
}
end++;
}
ans = max(ans, end - st);
return ans;
}
};
No comments:
Post a Comment