单调栈
单调栈:栈内元素单调按照递增或递减排列的栈。
适用问题:解决需要比较前后元素大小关系来解决的问题,比如找出下一个比目标数大的数。
题目:给定两个没有重复元素的数组,nums1和nums2其中nums1是nums2的字集,要求nums1中数字x的下一个更大元素是指x在nums2中右边对应的第一个比x大的数。如果不存在就在该位置输出-1。
示例:输入
nums1 = [4,1,2],nums2 = [1,3,4,2]
输出
[-1,3,-1]
思路:先遍历nums2将里面元素和栈顶元素对比若为空或者比其小就入栈。如果比其大就让栈顶元素出栈,将该元素入栈。
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
Stack<Integer> stack = new Stack<Integer>();
for(int num:nums2){
while(!stack.isEmpty()&&stack.peek()<num){
map.put(stack.pop(),num);
}
stack.push(num);
}
int[] result = new int[nums1.length];
for(int i=0;i<nums1.length;i++){
result[i]=map.getOrDefault(nums1[i],-1);
}
return result;
}