题目:
思路:通过单调栈保存右侧第一个最大值,然后通过建立element -> index的映射即可
代码:
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int len1 = nums1.length;
int len2 = nums2.length;
int[] res = new int[len1];
// 建立单调栈
int[] big = new int[len2]; //用来记录nums2中右侧比该元素大的第一个元素
Arrays.fill(big, -1);
Deque<Integer> queue = new LinkedList<>(); // 存放的是下标
for(int i=0;i<len2;i++){
while(!queue.isEmpty()){
if(nums2[i]>nums2[queue.peekLast()]){
int index = queue.pollLast();
big[index] = nums2[i];
}else{
break;
}
}
queue.offerLast(i);
}
// 查找
// 优化:因为不存在重复元素,所以可以建立element->index的映射关系
Map<Integer, Integer> hash = new HashMap<>();
for(int i=0;i<len2;i++){
hash.put(nums2[i], i);
}
// 查找结果
for(int i=0;i<len1;i++){
int index = hash.get(nums1[i]);
res[i] = big[index];
}
return res;
}
}
提交结果: