- 定長度的 sliding window pattern
- 步驟
- construct sliding window + check condition
- move sliding window
(1) remove item
(2) check condition
(3) add item
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:
bool solve(vector<int>& nums, int k) {
_w = make_unique<WindowImpl>(k);
int n = nums.size();
for (int i = 0; i < n; i++) {
if (i >= k) _w->erase(nums[i-k]);
if (_w->check(nums[i])) return true;
_w->add(nums[i]);
}
return false;
}
};