题目描述
给定一个由若干 0
和 1
组成的数组 nums
,我们最多可以将 K
个值从 0
变成 1
。
返回仅包含 1
的最长(连续)子数组的长度。
力扣:1004. 最大连续 1 的个数 III
输入:A = [ 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。
题目分析:
非常典型的滑动窗口题
class Solution {
public int longestOnes(int[] nums, int K) {
int res = -1;
int left = 0, right = 0;
int zeros = 0;
while (right < nums.length) {
if (nums[right] == 0)
zeros ++;
while (zeros > K) {
if (nums[left++] == 0)
zeros --;
}
res = Math.max(res, right - left + 1);
right ++;
}
return res;
}
}