739. 每日温度

题目:https://leetcode-cn.com/problems/daily-temperatures/

解题思路参考力扣上的大神

代码运行结果:

执行用时 :20 ms, 在所有 Java 提交中击败了81.89%的用户

内存消耗 :47.2 MB, 在所有 Java 提交中击败了6.45%的用户

使用递减栈来解决该问题。假设返回的数组是 ret ;从左向右遍历原数组,比较当前元素 cur 和栈顶元素 top 的大小:

  • 若 cur <= top ,则将 cur 入栈;
  • 若 cur > top ,那么 ret[top 在原数组的下标] = (cur 在原数组的下标 - top 在原数组的下标)  并弹出栈顶元素。

具体可以看 这篇题解 后半部分的动画演示视频,清晰明了。

class Solution {
    public int[] dailyTemperatures(int[] T) {
        int length = T.length, tem;
        int[] ret = new int[length];
        Stack stack = new Stack<>();
        for(int i = 0; i < length; i++){
            while(!stack.isEmpty() && T[i] > T[stack.peek()]){
                tem = stack.pop();
                ret[tem] = i - tem;
            }
            stack.push(i);
        }
        return ret;
    }
}

 

你可能感兴趣的:(LeetCode)