美文网首页
LeetCode 滑动窗口·

LeetCode 滑动窗口·

作者: 来到了没有知识的荒原 | 来源:发表于2021-02-23 11:37 被阅读0次

    1438. 绝对差不超过限制的最长连续子数组

    
    class Solution {
    public:
        int longestSubarray(vector<int> &nums, int limit) {
            deque<int> qmax, qmin;
            int l = 0, res = 0;
            for (int i = 0; i < nums.size(); i++) {
                int t = nums[i];
                while (!qmin.empty() && qmin.back() > t)qmin.pop_back();
                while (!qmax.empty() && qmax.back() < t)qmax.pop_back();
                qmin.push_back(t), qmax.push_back(t);
    
                while (!qmin.empty() && !qmax.empty() && qmax.front() - qmin.front() > limit) {
                    if (qmin.front() == nums[l])qmin.pop_front();
                    if (qmax.front() == nums[l])qmax.pop_front();
                    l++;
                }
                res = max(res, i - l + 1);
            }
            return res;
        }
    };
    
    

    1004. 最大连续1的个数 III

    class Solution {
    public:
        int longestOnes(vector<int> &A, int K) {
            int l = 0, r = 0, res = 0, n = A.size();
            int cnt = 0;
            while (r < n) {
                if (!A[r])cnt++;
                while (cnt > K) {
                    if (!A[l])cnt--;
                    l++;
                }
                res = max(res, r - l + 1);
                r++;
            }
            return res;
        }
    };
    

    相关文章

      网友评论

          本文标题:LeetCode 滑动窗口·

          本文链接:https://www.haomeiwen.com/subject/gtyxfltx.html