剑指 Offer II 038. 每日温度

算法记录

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;
    }
}

总结

熟悉单调栈的方法。

Guess you like

Origin blog.csdn.net/MTYSYS19990212/article/details/121309070