leetcode496题
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
Map<Integer,Integer> result = build(nums2);
int []nums = new int[nums1.length];
for(int i = 0; i < nums1.length; i++){
nums[i] = result.get(nums1[i]);
}
return nums;
}
public Map<Integer,Integer> build(int []nums2){
Map<Integer,Integer> map = new HashMap<>();
Stack<Integer> stack = new Stack<>();
for(int i = nums2.length - 1; i >= 0; i--){
while(!stack.isEmpty() && stack.peek() <= nums2[i]){
stack.pop();
}
map.put(nums2[i],stack.isEmpty() ? -1 : stack.peek());
stack.push(nums2[i]);
}
return map;
}
leetcode739题
public int[] dailyTemperatures(int[] temperatures) {
int []result = new int[temperatures.length];
Stack<Integer> stack = new Stack<>();
for(int i = temperatures.length - 1 ; i >= 0; i--){
while(!stack.isEmpty() && temperatures[stack.peek()] <= temperatures[i]){
stack.pop();
}
result[i] = stack.isEmpty() ? 0 : stack.peek() - i;
stack.push(i);
}
return result;
}
leetcode503题
public int[] nextGreaterElements(int[] nums) {
int len = nums.length;
int []result = new int[len];
Stack<Integer> stack = new Stack<>();
for(int i = 2 * len - 1; i >= 0; i--){
while(!stack.isEmpty() && stack.peek() <= nums[i % len]){
stack.pop();
}
result[i % len] = stack.isEmpty() ? -1 : stack.peek();
stack.push(nums[i % len]);
}
return result;
}