Question 0 Daily Temperature母体

https://leetcode.com/problems/daily-temperatures/solutions/

Summary

  • 找右边,第一天比今天温度大的

Method 1 暴力解

  • O(n^2)

Method 2 Optimization

Step 1: 确认Use Case of Mono -Stack

Step 2: 用的是什么栈:动手过个例子(2元素就够了)

  • 73遇到74置换==》用一个递减系

    • 因为留在stack里面是不符合条件的。。。,所以你既然要找更大的,留下的一定是更小的。

    • 然后当你踢到最后不能踢了,说明你找到这个踢的这个人的更大一个的元素

  • 73遇到73置换么?==》单调非递增栈

    • 所以遇到自己相同的,是不符合条件的,也就是留在栈里面

Step 3: 栈里存的是什么物理意义

  • value or index

  • 人间题目问的是等几天,所以存的是index

// Some code
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        // sanity check
        int[] result = new int[temperatures.length];
        Deque<Integer> monoStack = new ArrayDeque<>();
        for (int i = 0; i < temperatures.length; i++) {
            int curTemp = temperatures[i];
            while (!monoStack.isEmpty() && temperatures[monoStack.peekLast()] < curTemp) {
                int index = monoStack.pollLast();
                result[index] = i - index; // 谁置换你的,谁就是你的结果,被置换的人结果确定
            }
            monoStack.offerLast(i); //新来的一定要进栈,很容易忘(因为你需要看下能不能找到)
        }
        return result;
    }   
}

Last updated