最大连续 1 的个数
问题:
给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
思路:
双指针
- 左指针首先不动,右指针遍历数组,遇到 0 则
K--
。- 如果 0 的个数大于 K,左指针随右指针同步移动,且同时满足左指针遇到 0 时则
K++
。- 返回窗口大小。
class Solution {
public:
int longestOnes(const vector<int>& A, int K) const {
auto l = 0;
auto r = 0;
while(r < A.size()) {
if(A[r++] == 0) K--;
if(K < 0 && A[l++] == 0) K++;
}
return r - l;
}
};