LeetCode热题100(每日温度)

题目:

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

代码:

java 复制代码
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int n = temperatures.length;
        int[] res = new int[n];
        //维护单独递减栈
        Deque<Integer> stack = new ArrayDeque<Integer>();
        for(int i = 0; i < n;i++){
            while(stack.size() > 0 && temperatures[stack.peek()] < temperatures[i]){
                int j = stack.pop();
                res[j] = i-j;
            }
            stack.push(i);
        }
        return res;
    }
}

思路

1.使用单调栈,这里其实有一个很烦的地方,因为很多人会把单调栈的题解分为单调递减栈还是单调递增栈。拿到这道题目我不去想应该建立什么栈,首先得有一个栈,题目求的是左边第一个更大的数。那在遍历的时候自然需要把当前元素和栈中的元素对比,脑中过一遍你自然知道,如果当前元素大于栈顶元素该怎么做,如果小于栈顶元素直接入栈就行。写完之后自然就知道了,站里面的元素单调递减。

2.这里唯一需要注意的你往栈中存的是数组的下标,比较的时候比的是具体的值。

3.现在碰到比较难的的题目,我的第一反应往往不是去看题解,而是尝试自己去写一遍,前提是确实之前不懂的时候看过题解,看到题目时候会有一个大概的思路,写着写着就明白了。写到这里还是很开心的,从第一次做的时候有点懵,看视频题解可能也有点不理解,到现在拿到题目可以按自己的理解敲出来。