- 不定長度的 sliding window pattern
- 步驟
move sliding window
(1) 滑動左指標直到 window 有效
(2) 加入右指標
(3) 更新
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;
}
};