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.
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
Code
這題和 Longest Repeating Character Replacement 相同,只是從字母變成了零和一。
Time Complexity: , Space Complexity:
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
int start = 0;
int res = 0;
for(int i = 0; i < nums.size(); i++) {
if(nums[i] == 0)
k--;
while(k < 0) {
if(nums[start] == 0)
k++;
start++;
}
res = max(res, i - start + 1);
}
return res;
}
};
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
int res = 0;
int ones = 0;
int zeros = 0;
for(int i = 0, j = 0; j < nums.size(); j++) {
if(nums[j] == 0) zeros++;
else ones++;
while(j - i + 1 - ones > k) {
if(nums[i] == 1) ones--;
else zeros--;
i++;
}
res = max(res, j - i + 1);
}
return res;
}
};