leetcode-239 滑动窗口最大值

题目描述:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回滑动窗口中的最大值。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Window {
private LinkedList<Integer> queue;

public Window() {
this.queue = new LinkedList<>();
}

public void add(Integer e) {
while (!queue.isEmpty() && queue.getLast() < e) {
queue.pollLast();
}
queue.addLast(e);
}

public void remove(Integer e) {
if (e.equals(queue.getFirst())) {
queue.removeFirst();
}
}

public Integer getMax() {
return queue.getFirst();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
Window window = new Window();
int[] res = new int[nums.length - k + 1];
for (int i = 0; i < k - 1; i++) {
window.add(nums[i]);
}
for (int i = k - 1; i < nums.length; i++) {
window.add(nums[i]);
res[i - k + 1] = window.getMax();
window.remove(nums[i - k + 1]);
}
return res;
}
}