Skip to content

Latest commit

 

History

History
83 lines (63 loc) · 2.37 KB

1004-max-consecutive-ones-iii.md

File metadata and controls

83 lines (63 loc) · 2.37 KB

1004. Max Consecutive Ones III - 最大连续1的个数 III

给定一个由若干 01 组成的数组 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. 1 <= A.length <= 20000
  2. 0 <= K <= A.length
  3. A[i] 为 0 或 1 

题目标签:Two Pointers / Sliding Window

题目链接:LeetCode / LeetCode中国

题解

双指针,滑动窗口的思想

Language Runtime Memory
cpp 44 ms 13.7 MB
class Solution {
public:
    int longestOnes(vector<int>& A, int K) {
        int p = 0;
        int q = 0;
        int k = K;
        int n = A.size();
        int res = 0;
        while (p >= 0 && p < n && q >= 0 && q < n) {
            if (A[q] == 0) {
                if (k > 0) {
                    k--;
                    res = max(res, q - p + 1);
                    q++;
                } else {
                    if (A[p] == 0) {
                        k++;
                    }
                    p++;
                }
            } else {
                res = max(res, q - p + 1);
                q++;
            }
        }
        return res;
    }
};
static auto _ = [](){ ios::sync_with_stdio(false); cin.tie(nullptr); return 0; }();