Skip to content
Rain Hu's Workspace
Go back

[LeetCode] 不定長 Sliding Window Pattern

Rain Hu
class Window {
public:
    virtual void add(int num) = 0;
    virtual void erase(int num) = 0;
    virtual bool check(int num) = 0;
    virtual ~Window() {}
};

class Solution {
private:
    unique_ptr<Window> _w;
public:
    Solution(): _w() {}
    int solve(vector<int>& nums, int k) {
        _w = make_unique<WindowImpl>(k);
        int len = 0;
        int n = nums.size(), left = 0, right = 0;

        while (right < n) {
            int num = nums[right++];
            while (_w->check(num)) _w->erase(nums[left++]);
            _w->add(num);
            res = max(res, right-left);
        }
        return len;
    }
};

Share this post on:

Previous
[LeetCode] 3090. Maximum Length Substring With Two Occurrences
Next
[LeetCode] 220. Contains Duplicate III