维护一个单调栈,栈从顶到底,越来越大。
从右往左遍历nums2,如果此时的元素比栈顶元素要大,就弹出栈顶,并再次循环。
现在更新map里的答案。
最后按照nums1,将map里的答案导入。
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
Map<Integer, Integer> mp = new HashMap<>();
Deque<Integer> stack = new LinkedList<>();
for (int i = nums2.length - 1; i >= 0; i--) {
while (!stack.isEmpty() && nums2[i] > stack.peek()) {
stack.pop();
}
mp.put(nums2[i], stack.isEmpty() ? -1 : stack.peek());
stack.push(nums2[i]);
}
for (int i = 0; i < nums1.length; i++) {
nums1[i] = mp.getOrDefault(nums1[i], -1);
}
return nums1;
}
}