Deque
Deque:双端队列,可以实现Stack的全部操作
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.HashMap;
import java.util.Map;
/**
* Stack常用用法:push、pop出栈、peek返回栈顶元素
*/
public class DequeNotes {
public static void main() {
Deque<Integer> que = new ArrayDeque<>();
que.addLast(5);
que.addLast(8);
que.addLast(3);
que.addLast(4);
System.out.println(que.stream().toList().toString());
que.pollLast();
System.out.println(que.stream().toList().toString());
}
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
// 双端队列作为单调栈使用
Deque<Integer> que = new ArrayDeque<>();
// 用于保存结果<当前元素,下一最大元素值>
Map<Integer, Integer> map = new HashMap<>();
for (int i = nums2.length - 1; i >= 0; --i) {
while (!que.isEmpty() && que.getLast() < nums2[i]) {
que.pollLast();
}
map.put(nums2[i], que.isEmpty() ? -1 : que.getLast());
que.addLast(nums2[i]);
}
int[] res = new int[nums1.length];
for (int i = 0; i < nums1.length; i++) {
if (map.containsKey(nums1[i])) {
res[i] = map.get(nums1[i]);
}
}
return res;
}
}