请根据每日 气温 列表 temperatures ,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

    示例 1:

    输入: temperatures = [73,74,75,71,69,72,76,73]
    输出: [1,1,4,2,1,1,0,0]
    示例 2:

    输入: temperatures = [30,40,50,60]
    输出: [1,1,1,0]
    示例 3:

    输入: temperatures = [30,60,90]
    输出: [1,1,0]

    提示:

    1 <= temperatures.length <= 105
    30 <= temperatures[i] <= 100


    1. class Solution {
    2. /**
    3. 本题采用单调栈解决,具体的使用单调递减栈,因为我们是遇到第一个比栈顶元素大的值就出栈,我们栈里面存储下标值
    4. */
    5. public int[] dailyTemperatures(int[] temperatures) {
    6. int n = temperatures.length;
    7. Deque<Integer> stack = new LinkedList<>();
    8. int[] res = new int[n];
    9. for (int i = 0; i < n; ++i) {
    10. while (!stack.isEmpty() && temperatures[stack.peek()] < temperatures[i]) {
    11. int idx = stack.poll();
    12. res[idx] = i - idx;
    13. }
    14. stack.push(i);
    15. }
    16. return res;
    17. }
    18. }