Skip to content

LeetCode 1004 最大连续1的个数 III#

目录#

1. 题目描述#

1.1. Limit#

Time Limit: 2000 ms

Memory Limit: 131072 kB

1.2. Problem Description#

给定一个由若干 01 组成的数组 A,我们最多可以将 K 个值从 0 变成 1

返回仅包含 1 的最长(连续)子数组的长度。

1.3. Sample Input 1#

输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2

1.4. Sample Output 1#

输出:6
解释:
[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6。

1.5. Sample Input 2#

输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3

1.6. Sample Output 2#

输出:10
解释:
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。

1.7. Note#

1 <= A.length <= 20000

0 <= K <= A.length

A[i] 为 0 或 1

1.8. Source#

LeetCode 1004 最大连续1的个数 III

2. 解读#

滑动窗口、尺取法。统计窗口内0的数量是否大于K,大于K则减小窗口大小。

3. 代码#

class Solution {
public:
    int longestOnes(vector<int>& A, int K)
    {
        queue<int> qu;
        int count = 0;
        size_t ans = 0;
        size_t len = A.size();
        // 尺取
        for (size_t i = 0; i < len; i++) {
            // 放入队列
            qu.push(A[i]);
            // 记录队列中0的数量
            if (A[i] == 0)
                count++;
            // 当0的数量大于K时,出队
            while (count > K) {
                if (qu.front() == 0)
                    count--;
                qu.pop();
            }
            // 记录队列最大长度
            ans = max(ans, qu.size());
        }
        return ans;
    }
};

联系邮箱:curren_wong@163.com

CSDN:https://me.csdn.net/qq_41729780

知乎:https://zhuanlan.zhihu.com/c_1225417532351741952

公众号:复杂网络与机器学习

欢迎关注/转载,有问题欢迎通过邮箱交流。

二维码

Back to top