//实现功能:peek()取得队列的最大值,比最大值先添加进来的删除,后添加进来的保留
class Mydeque{
Deque<Integer> deque;
public Mydeque() {
deque = new LinkedList<>();
}
public void add(int val){
while(!deque.isEmpty() && val>deque.peekLast()){
deque.removeLast();
}
deque.add(val);
}
public void poll(int val){
if(!deque.isEmpty() && deque.peek()== val){
deque.poll();
}
}
public int top(){
return deque.peek();
}
}
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
Mydeque deque = new Mydeque();
ArrayList<Integer> ans = new ArrayList<>();
for (int i = 0; i < k; i++) {
deque.add(nums[i]);
}
ans.add(deque.top());
for(int i = k; i<nums.length ;i++ ){
//如果要删除的值是顶端的值,就删除,如果不是,说明之前已经删除过了。
deque.poll(nums[i-k]);
deque.add(nums[i]);
ans.add(deque.top());
}
int[] res = new int[ans.size()];
for (int i = 0; i < ans.size(); i++) {
res[i] = ans.get(i);
}
return res;
}
}