739. 每日温度
496. 下一个更大元素 I
- 每日温度
class Solution {public int[] dailyTemperatures(int[] temperatures) {int length = temperatures.length;int[] res = new int[length];//保留下标Deque<Integer> stack = new LinkedList<>();stack.push(0);for(int i=0;i<length;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;}
}
- 下一个更大元素 I
//暴力算法
class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {int m = nums1.length, n = nums2.length;int[] res = new int[m];for (int i = 0; i < m; ++i) {int j = 0;while (j < n && nums2[j] != nums1[i]) {++j;}int k = j + 1;while (k < n && nums2[k] < nums2[j]) {++k;}res[i] = k < n ? nums2[k] : -1;}return res;}
}//单调栈处理
public int[] nextGreaterElement(int[] nums1, int[] nums2) {Stack<Integer> stack = new Stack<>();int[] res = new int[nums1.length];Arrays.fill(res, -1);Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums1.length; i++) {map.put(nums1[i], i);}stack.add(0);for (int i = 1; i < nums2.length; i++) {if (nums2[i] <= nums2[stack.peek()]) {stack.add(i);} else {while (!stack.isEmpty() && nums2[stack.peek()] < nums2[i]) {if (map.containsKey(nums2[stack.peek()])) {Integer index = map.get(nums2[stack.peek()]);res[index] = nums2[i];}stack.pop();}stack.add(i);}}return res;}