其实本题并不难,我花了15分钟不到就写好了一个非常近似最优解的方法:是用PriorityQueue
    不过我有一点当时没有想明白的就是:
    其实用Stack就可以维持minHeap,而不需要专门写一个MinHeap。
    每次都pop出来比当前小的,再把当前的放进去,自然而然就形成了一个最小的的最上面的结构,想明白这点这题就足够了

    • 时间复杂度:
      • 整体遍历一遍
      • 所以是739. Daily Temperatures - 图1
    • 空间复杂度:
      • 只用了额外的Stack,最坏情况就是倒序,Stack里面装了所有的日期
      • 739. Daily Temperatures - 图2

    代码如下:

    1. class Solution {
    2. public int[] dailyTemperatures(int[] T) {
    3. Stack<Integer> stack = new Stack<>();
    4. int[] result = new int[T.length];
    5. for (int i = 0; i < T.length; ++i) {
    6. while (!stack.isEmpty() && T[i] > T[stack.peek()]) {
    7. int idx = stack.pop();
    8. result[idx] = i - idx;
    9. }
    10. stack.add(i);
    11. }
    12. return result;
    13. }
    14. }