739. 每日温度


739.每日温度

一、题目

请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例一

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

示例二

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

示例三

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

二、相关链接

三、解题思路

  • 解法:单调栈
  • 思路:将每一天的温度(存下标)压入栈,后面压入的时候把前面低于的取出来计算天数(保证栈底到栈顶是递增的)

四、代码

public class DailyTemperatures {
  public int[] dailyTemperatures(int[] temperatures) {
    //可以参考左视图,如果一个温度把之前的温度的盖住了,说明比他高,就可以赋值了,并移除状态
    //存下标吧,存value有问题
    Stack<Integer> stack = new Stack<>();
    //初始化个结果吧,默认值是0(不要直接操作原数组,会多一个for操作)
    int result[] = new int[temperatures.length];
    for(int i=0;i<temperatures.length;i++){
      //当栈不为空时,从上取比当前数小的取出并设置result
      while(!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()]){
        //计算相隔天数并写入result
        int index = stack.pop();
        result[index] = i - index;
      }
      stack.push(i);
    }

    return result;
  }

  /**
   * 例子:
   *  输入:[73,74,75,71,69,72,76,73]
   *  输出:[1,1,4,2,1,1,0,0]
   */
  public static void main(String[] args) {
    int nums[] = new int[]{73,74,75,71,69,72,76,73};
    int result[] = new DailyTemperatures().dailyTemperatures(nums);
    for(int i:result){
      System.out.print(i+",");
    }
  }
}

五、总结

  • 难度:简单看题解后可完成

文章作者: GaryLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GaryLee !
  目录