其实本题并不难,我花了15分钟不到就写好了一个非常近似最优解的方法:是用PriorityQueue
不过我有一点当时没有想明白的就是:
其实用Stack就可以维持minHeap,而不需要专门写一个MinHeap。
每次都pop出来比当前小的,再把当前的放进去,自然而然就形成了一个最小的的最上面的结构,想明白这点这题就足够了
- 时间复杂度:
- 整体遍历一遍
- 所以是
- 整体遍历一遍
- 空间复杂度:
- 只用了额外的
Stack,最坏情况就是倒序,Stack里面装了所有的日期
- 只用了额外的
代码如下:
class Solution {public int[] dailyTemperatures(int[] T) {Stack<Integer> stack = new Stack<>();int[] result = new int[T.length];for (int i = 0; i < T.length; ++i) {while (!stack.isEmpty() && T[i] > T[stack.peek()]) {int idx = stack.pop();result[idx] = i - idx;}stack.add(i);}return result;}}
