class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int lens = temperatures.length;
int[] res = new int[lens];
Deque<Integer> stack = new LinkedList<>();
stack.push(0);
for(int i = 1; i <lens; i++){
if(temperatures[i] <= temperatures[stack.peek()]){
stack.push(i);
}else{
while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){
res[stack.peek()] = i - stack.peek();
stack.pop();
}
stack.push(i);
}
}
return res;
}
}
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int lens = nums1.length;
int[] res = new int[lens];
Arrays.fill(res, -1);
Stack<Integer> stack = new Stack<>();
stack.add(0);
HashMap<Integer, Integer> hashMap = new HashMap<>();
for(int i = 0; i < nums1.length; i++){
hashMap.put(nums1[i], i);
}
for(int i = 1; i < nums2.length; i++){
if(nums2[i] <= nums2[stack.peek()]){
stack.add(i);
}else{
while(!stack.isEmpty() && nums2[i] > nums2[stack.peek()]){
if(hashMap.containsKey(nums2[stack.peek()])){
int index = hashMap.get(nums2[stack.peek()]);
res[index] = nums2[i];
}
stack.pop();
}
stack.add(i);
}
}
return res;
}
}