1004. 最大连续1的个数 III
给定一个由若干 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。
提示:
1 <= A.length <= 20000
0 <= K <= A.length
A[i] 为 0 或 1
题目链接:https://leetcode-cn.com/problems/max-consecutive-ones-iii/
求解:用滑动窗口来求解
个人觉得还蛮神奇的,虽然还不能很好领略其精髓。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String line=scanner.nextLine();
line=line.replaceAll(" ", "");
int K=scanner.nextInt();
int left=0;
int right=0;
int Max=0;
int change=0;
while(right<line.length()){
// 窗口一直右移,如果遇到0 则更改标记+1
if(line.charAt(right)=='0') change++;
right++;
//更改个数超过允许指K,左窗口右移
while(change>K){
if(line.charAt(left)=='0') change--;
left++;
}
if(Max<(right-left)) Max=right-left;
}
System.out.println(Max);
}
}