题目:给定一个二进制数组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; } }