给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。
示例 1:
输入:nums = 1,1,1,0,0,0,1,1,1,1,0, K = 2
输出:6
解释:1,1,1,0,0,1,1,1,1,1,1
粗体数字从 0 翻转到 1,最长的子数组长度为 6。
示例 2:
输入:nums = 0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1, K = 3
输出:10
解释:0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1
粗体数字从 0 翻转到 1,最长的子数组长度为 10。
cpp
int longestOnes(vector<int>& nums, int k) {
int left = 0 , right = 0;
int len = 0, maxi = 0;
int n = nums.size();
for (right = 0 ; right < n ; ++right){
if (nums[right] == 0){
if (k > 0) {
k--;
len++;
maxi = max(len, maxi);
} else{
while (nums[left] == 1) {left++;len--;}
left++;
}
} else {
len++;
maxi = max(maxi, len);
}
}
return maxi;
}