题目
思路
- 想了一下双指针,但感觉双指针本质上和O(n^2)没有区别。
- 题解里面说这个题的标签是栈…我咋不知道这个题的标签是栈,其实知道栈之后就很简单了,方法我也想到了,但是绕进了一个死胡同,我一直认为可以按顺序求ans,不能的话就是有问题,直到看了题解才发现不一定要按顺序的,是我傻了。
代码
public int[] dailyTemperatures(int[] temperatures) {
//每次 遍历 更新所有小于它的存的地址
int[] ans = new int[temperatures.length];
Stack<Integer> stack = new Stack<Integer>();
//栈里放入的是位置i
for(int i=0;i<temperatures.length;i++){
while (!stack.empty() && temperatures[i]>temperatures[stack.peek()]){
int top = stack.pop();
ans[top] = i-top;
}
stack.push(i);
}
return ans;
}