LeetCode-每日温度

111 阅读1分钟

算法记录

LeetCode 题目:

  请根据每日 气温 列表 temperatures ,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。


# 说明

一、题目

  如果气温在这之后都不会升高,请在该位置用 0 来代替。

二、分析

  • 暴力求解也可以, 不过作为优秀的程序员肯定追求优美的代码。
  • 翻译题目的含义就是说找最近的大于当前点的温度坐标差, 刚好可以用单调栈来套。
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        Stack<Integer> s = new Stack();
        int[] ret = new int[temperatures.length];
        for(int i = 0; i < temperatures.length; i++) {
            while(!s.empty() && temperatures[i] > temperatures[s.peek()]) {
                ret[s.peek()] = i - s.peek();
                s.pop();
            }
            s.push(i);
        }
        return ret;
    }
}

总结

熟悉单调栈的方法。