Leetcode1004. 最大连续1的个数 III
1004. 最大连续1的个数 III
Difficulty: 中等
给定一个由若干 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
Solution
思路:滑动窗口。窗口中的元素都是可以通过翻转n次(n<K)转化为1的连续子串。因此,设置一个窗口,当进入窗口的元素为1时,窗口长度加1。当进入窗口元素为0时,先判断能不变成1,若可以那么窗口长度还是加1;否则,就将窗口进行平移。最后窗口当长度就是最大的连续1的子串长度。
Language: java
class Solution {
public int longestOnes(int[] A, int K) {
int numOfZero=0, left=0, right=0;
while(right < A.length){
if(A[right++] == 0) numOfZero++;
if(numOfZero > K && A[left++] == 0) numOfZero--;
}
return right - left;
}
}