这道题应该是 easy?
因为 154 为 easy, 154 需要同时求两个最值,而且需要自己处理输入输出,在 Java 中还要用 buffer 进行 io 优化,不能直接使用标准输出。
可能是为了保存在《剑指offer》中的困难吧。
实际上是道单调栈的入门题目。
class Solution {
public int[] maxInWindows(int[] nums, int k) {
int n = nums.length;
int len = n - k + 1;
int[] ans = new int[len];
Deque<Integer> stack = new ArrayDeque<>();
int index = 0;
for (int i = 0; i < n; i++) {
while (!stack.isEmpty() && nums[stack.peekLast()] <= nums[i]) {
stack.pollLast();
}
stack.addLast(i);
if (i >= k - 1) {
int start = i - k + 1;
while (!stack.isEmpty() && stack.peekFirst() < start) {
stack.pollFirst();
}
ans[index++] = nums[stack.peekFirst()];
}
}
return ans;
}
}