739. Daily Temperatures
Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead.
题目解析:
- 找右边第一个比它大的使用单调递减栈
代码:
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
Deque<Integer> stack = new LinkedList<>();
int[] result = new int[temperatures.length];
for (int i = 0; i < temperatures.length; i++) {
while(stack.size() > 0 && temperatures[stack.peek()] < temperatures[i]) {
int idx = stack.pop();
result[idx] = i - idx;
}
stack.push(i);
}
return result;
}
}
496. Next Greater Element I
The next greater element of some element x in an array is the first greater element that is to the right of x in the same array.
You are given two distinct 0-indexed integer arrays nums1 and nums2, where nums1 is a subset of nums2.
For each 0 <= i < nums1.length, find the index j such that nums1[i] == nums2[j] and determine the next greater element of nums2[j] in nums2. If there is no next greater element, then the answer for this query is -1.
Return an array ans of length nums1.length such that ans[i] is the next greater element as described above.
题目解析:
- 先求出nums2中每个元素的下一个更大值
代码:
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
Map<Integer, Integer> map = new HashMap<>();
Deque<Integer> stack = new LinkedList<>();
for (int i = 0; i < nums2.length; i++) {
while(!stack.isEmpty() && nums2[i] > stack.peekLast()) {
map.put(stack.pollLast(), nums2[i]);
}
stack.addLast(nums2[i]);
}
while(!stack.isEmpty()) {
map.put(stack.pollLast(), -1);
}
int[] result = new int[nums1.length];
for (int i = 0; i < nums1.length; i++) {
result[i] = map.get(nums1[i]);
}
return result;
}
}