496. Next Greater Element I
https://leetcode.com/problems/next-greater-element-i/
描述:给定两个数组 nums1 与 nums2,nums1 是 nums2 的子数组,输出 nums1 数组中的元素在 nums2 数组中大于它的第一个数值,没有则输出 -1
解法一:单调栈调用
如果当前元素大于栈顶元素,则 pop 出当前栈中所有比当前元素小的元素,然后将当前元素压栈
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
Stack<Integer> stack = new Stack<>();
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums2.length; i++) {
while(!stack.isEmpty() && stack.peek() < nums2[i]) { // 单调栈,栈中元素从大到小;
int top = stack.pop(); // 进入此分支是当前元素大于栈顶元素,pop 出栈顶元素
map.put(top, nums2[i]); // 当前元素是栈顶元素的下一个大的值
}
stack.push(nums2[i]); // 如果当前元素小于栈顶元素,则进栈
}
while(!stack.isEmpty()) {
map.put(stack.pop(), -1);
}
for (int i = 0; i < nums1.length; i++) {
nums1[i] = map.get(nums1[i]);
}
return nums1;
}
}