给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。 返回仅包含 1 的最长(连续)子数组的长度。 示例
1: 输入:A = [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: 输入: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。
滑动窗口算法:
public class Question02 {
public static int longestOnes(int[] A, int K) {
int len = A.length;
int left = 0, right = 0; // 初始化左侧指针,右侧指针
int modifyCount = 0, res = 0 ;// 修改次数,最大长度
while (right < len) {
if (A[right] == 0) {
modifyCount ++ ; // 修改次数加1
}
right++;// 右指针向右移动
if (modifyCount > K) { // 如果修改次数大于允许最大次数--》left向右移动
if (A[left] == 0) {
modifyCount--;
};
left ++;
}
res = Math.max(res, right - left);
}
return res;
}
public static void main(String[] args) {
int[] A = {1,1,1,0,0,0,1,1,1,1,0} ;
int K = 2;
int longestOnes = longestOnes(A, K);
System.out.println(longestOnes);
}
}
给定一个包含0和1的数组A,允许最多翻转K个0变为1,求最长的全为1的连续子数组长度。通过滑动窗口算法,可以找到在翻转限制内的最长连续1子数组,例如在特定输入情况下,翻转后最长子数组长度可达6或10。
384

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



