496. 下一个更大元素 I
解题思路
- 首先计算nums2的每一个元素的下一个比他大的元素,使用单调栈
- 将上面的结果和nums2中的每一个元素组成映射map
- 针对每一个Nums1的元素 查询map 记录map 的value
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int[] greater = nextGreaterElement(nums2);
Map<Integer,Integer> greaterMap = new HashMap<>();
for(int i =0; i < nums2.length; i++){
greaterMap.put(nums2[i],greater[i]);
}
int[] res = new int[nums1.length];
for(int i = 0; i < nums1.length; i++){
res[i] = greaterMap.get(nums1[i]);
}
return res;
}
public int[] nextGreaterElement(int[] nums){
int n = nums.length;
int[] res = new int[n];
Stack<Integer> s = new Stack<>();
for(int i = n - 1; i >= 0; i--){
while(!s.isEmpty() && s.peek() <= nums[i]){
s.pop();
}
res[i] = s.isEmpty() ? -1 : s.peek();
s.push(nums[i]);
}
return res;
}
}