class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int n = nums1.length, m = nums2.length;
int[] res = new int[n];
Deque<Integer> stack = new ArrayDeque<>();
Map<Integer, Integer> map = new HashMap<>();
for (int i = m - 1; i >= 0; i--) {
while (!stack.isEmpty() && nums2[i] > nums2[stack.peek()]) {
stack.pop();
}
map.put(nums2[i], stack.isEmpty() ? -1 : nums2[stack.peek()]);
stack.push(i);
}
for (int i = 0; i < nums1.length; i++) {
res[i] = map.get(nums1[i]);
}
return res;
}
}