【每日一题】 1004. 最大连续1的个数 III
避免每日太过咸鱼,一天搞定一道LeetCode算法题
一、题目描述
难度: 中等
给定一个由若干 0
和 1
组成的数组 A
,我们最多可以将 K
个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
提示:
1 <= A.length <= 30000
1 <= K <= A.length
示例 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。
二、题解
方法:滑动窗口
这个题也是滑动窗口问题,我们直接left和right两个指针当right指针向后移动的时候判断当前的数字是不是1,是就继续移动,不是就对K-1,当K小于0的时候证明窗口中的0过多了 ,这时候left指针也向右移。
代码
class Solution {
public int minKBitFlips(int[] A, int K) {
int left = 0;
int right = -1;
int a = K;
for (int i = 0; i < A.length; i++) {
right++;
if (A[i] == 1) {
if (a < 0) {
if (A[left] == 0) {
a++;
}
left++;
}
continue;
}
a--;
if (a < 0) {
if (A[left] == 0) {
a++;
}
left++;
}
}
return right - left + 1;
}
}
作者:LeetCode
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
--------------最后感谢大家的阅读,愿大家技术越来越流弊!--------------
--------------也希望大家给我点支持,谢谢各位大佬了!!!--------------