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。
| 思路: 双指针 + 滑动窗口 (始终要维护窗口内的0的个数小于等于k) |
(2)A[right] == 1 时,++right;
(3)A[right] == 0 时,0的数量小于K时,++right;
(4)A[right] == 0 时,0的数量等于K时,为了容纳 right 处的0,left 移动过一个0的位置时,才可以容纳下right 处的0。
代码:
Bilibili的面试题似乎问过这道题:
class Solution {
public:
int longestOnes(vector<int>& A, int K) {
int l=0,r=0,res=0;
for(r=0;r<A.size();r++){
if(A[r]==0)
{
if(K==0){
while(A[l]==1){
l++;
}
l++;//从窗口中去掉一个0
}else{
K--;
}
}
res=max(res,r-l+1);
}
return res;
}
};
探讨了如何通过双指针及滑动窗口算法解决数组中最长连续1子数组的问题,给出了具体的实现代码示例。
406

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



