滑动窗口模板
void slidingWindow(string s, string t) {
unordered_map<char, int> need, window;
for (char c : t) need[c]++;
int left = 0, right = 0;
int valid = 0;
while (right < s.size()) {
char c = s[right];
right++;
...
printf("window: [%d, %d)\n", left, right);
while (window needs shrink) {
char d = s[left];
left++;
...
}
}
}
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums == null || nums.length == 0) {
return new int[0];
} else if(k == 1) {
return nums;
}
Deque<Integer> queue = new LinkedList<>();
int[] res = new int[nums.length - k + 1];
for(int i = 0, j = 0; i < nums.length; ++i) {
if(!queue.isEmpty() && queue.peek() < i - k + 1) {
queue.poll();;
}
while(!queue.isEmpty() && nums[i] > nums[queue.peekLast()]) {
queue.removeLast();
}
queue.addLast(i);
if(i >= k - 1) {
res[j++] = nums[queue.peek()];
}
}
return res;
}
```