用java写出:滑动窗口最大值
时间: 2023-07-19 10:28:11 浏览: 120
以下是Java代码实现滑动窗口最大值:
```
import java.util.*;
public class SlidingWindowMaximum {
public int[] maxSlidingWindow(int[] nums, int k) {
if (nums == null || nums.length == 0) {
return new int[0];
}
int n = nums.length;
int[] result = new int[n - k + 1];
int maxIndex = -1;
Deque<Integer> deque = new LinkedList<>();
for (int i = 0; i < n; i++) {
if (!deque.isEmpty() && deque.peek() < i - k + 1) {
deque.poll();
}
while (!deque.isEmpty() && nums[deque.peekLast()] < nums[i]) {
deque.pollLast();
}
deque.offer(i);
if (i >= k - 1) {
result[i - k + 1] = nums[deque.peek()];
}
}
return result;
}
}
```
其中,使用了双端队列(Deque)来存储当前窗口内的最大值的下标,以及当前窗口内的其他值。
具体实现中,从左到右遍历数组。如果队列中的最大值下标已经不在当前窗口内,将其从队列中移除。然后,从队列尾部开始比较,将小于当前值的下标都弹出队列,保证队列中的下标对应的值都大于当前值。最后,将当前值的下标加入队列中。若当前下标已经大于等于 k - 1,那么队列头部的下标对应的值就是当前窗口的最大值。将其存入结果数组中即可。
阅读全文