题目内容
力扣题目链接
官方java解答 我加了注解
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
Deque<Integer> deque = new LinkedList<Integer>();
for(int i=0;i<k;i++){
while(!deque.isEmpty()&&nums[i]>nums[deque.peekLast()]){
deque.removeLast();
}
deque.offerLast(i);
}
int [] ans=new int[nums.length-k+1];
ans[0]=nums[deque.peekFirst()];
for(int i=k;i<nums.length;i++){
while (!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]) {
deque.pollLast();
}
deque.offerLast(i);
while (deque.peekFirst() <= i - k) {
deque.pollFirst();
}
ans[i - k + 1] = nums[deque.peekFirst()];
}
return ans;
}
}
java中Duque的API
boolean add(E e)
将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回 true在成功时和抛出 IllegalStateException如果当前没有空间可用的。
void addFirst(E e)
插入此双端队列的前面,如果它是立即可行且不会违反容量限制,抛出一个指定的元素 IllegalStateException如果当前没有空间可用。
void addLast(E e)
在插入如果它是立即可行且不会违反容量限制,抛出此双端队列的末尾指定元素 IllegalStateException如果当前没有空间可用。
boolean contains(Object o)
如果此deque包含指定的元素,则返回 true 。
Iterator<E> descendingIterator()
以相反的顺序返回此deque中的元素的迭代器。
E element()
检索但不删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。
E getFirst()
检索,但不删除,这个deque的第一个元素。
E getLast()
检索,但不删除,这个deque的最后一个元素。
Iterator<E> iterator()
以正确的顺序返回此deque中的元素的迭代器。
boolean offer(E e)
将指定的元素插入由此deque表示的队列(换句话说,在该deque的尾部),如果可以立即执行,而不违反容量限制, true在成功时 false如果当前没有可用空间,则返回false。
boolean offerFirst(E e)
在此deque的前面插入指定的元素,除非它会违反容量限制。
boolean offerLast(E e)
在此deque的末尾插入指定的元素,除非它会违反容量限制。
E peek()
检索但不删除由此deque表示的队列的头部(换句话说,此deque的第一个元素),如果此deque为空,则返回 null 。
E peekFirst()
检索,但不删除,此deque的第一个元素,或返回 null如果这个deque是空的。
E peekLast()
检索但不删除此deque的最后一个元素,如果此deque为空,则返回 null 。
E poll()
检索并删除由此deque(换句话说,此deque的第一个元素)表示的队列的 null如果此deque为空,则返回 null 。
E pollFirst()
检索并删除此deque的第一个元素,如果此deque为空,则返回 null 。
E pollLast()
检索并删除此deque的最后一个元素,如果此deque为空,则返回 null 。
E pop()
从这个deque表示的堆栈中弹出一个元素。
void push(E e)
将元素推送到由此deque表示的堆栈(换句话说,在此deque的头部),如果可以立即执行此操作而不违反容量限制,则抛出 IllegalStateException如果当前没有可用空间)。
E remove()
检索并删除由此deque表示的队列的头(换句话说,该deque的第一个元素)。
boolean remove(Object o)
从此deque中删除指定元素的第一个出现。
E removeFirst()
检索并删除此deque的第一个元素。
boolean removeFirstOccurrence(Object o)
从此deque中删除指定元素的第一个出现。
E removeLast()
检索并删除此deque的最后一个元素。
boolean removeLastOccurrence(Object o)
从此deque中删除指定元素的最后一次出现。
int size()
返回此deque中的元素数。