维护一个单调栈,栈从顶到底,越来越大。
从右往左遍历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;
}
}

这篇博客介绍了如何利用单调栈解决数组中找到每个元素下一个更大的元素的问题。通过从右到左遍历第二个数组nums2,将大于栈顶元素的数入栈,并更新映射表,最后根据第一个数组nums1获取对应的答案。这种方法巧妙地利用了栈的特性,实现了高效查找。
263

被折叠的 条评论
为什么被折叠?



