其实本题并不难,我花了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;
}
}