题目描述
给定一个由若干 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;
}
}
本文介绍了如何使用滑动窗口算法解决LeetCode上的1004题——最大连续1的个数III。给定一个二进制数组nums和整数K,求最多将K个0翻转成1后,最长连续1子数组的长度。例如,对于输入A=[0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1]和K=3,最长子数组长度为10。解决方案中,通过维护一个左边界(left)和右边界(right),以及记录当前窗口内的0的个数(zeros),在窗口内0的数量超过K时,向左收缩窗口。
3184

被折叠的 条评论
为什么被折叠?



