题目:给定一个二进制数组nums 和一个整数k,如果可以翻转最多k个0,返回数组中连续1的最大个数。
解题思路:使用滑动窗口来实时维护left 和 right 了。在 right 向右移动的过程中,我们同时移动 left,直到left 为首个。
class Solution {
public int longestOnes(int[] nums, int k) {
int n = nums.length;
int left = 0, lsum = 0, rsum = 0;
int ans = 0;
for (int right = 0; right < n; ++right) {
rsum += 1 - nums[right];
while (lsum < rsum - k) {
lsum += 1 - nums[left];
++left;
}
ans = Math.max(ans, right - left + 1);
}
return ans;
}
}