题目信息:给定一个由若干 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。
AC代码,使用滑动窗口算法:
使用滑动窗口算法,将嵌套循环的问题,转换为单循环问题,每次循环修改左右指针,维护一个定长的区间和
class Solution {
public int longestOnes(int[] A, int K) {
int ans = 0;
int i = 0;
int j = 0;
int zero_count = K;
while(i < A.length && j < A.length){
if(A[j] == 1){
if(++j == A.length){