739. 每日温度
难度:中等
题目描述
解题思路
写了几道单调栈的题目之后就直到套路啦~直接套模板就可以了
public int[] dailyTemperatures(int[] T) {
if(T.length == 0)
return T;
int[] re = new int[T.length];
Stack<Integer> stack = new Stack<>();
stack.push(0);
for (int i = 1; i < T.length; i++) {
while(!stack.isEmpty() && T[i] > T[stack.peek()]) {
int last = stack.pop();
re[last] = i-last;
}
stack.push(i);
}
return re;
}
看评论发现还有一种思路,就是从后往前遍历。最后一天肯定是0,如果后一天大于前一天,那么前一天就是1;如果比前一天小,那么利用已经得到的结果(第一个比前一天小的天数)优化搜索次数。这种思想可以看作是暴力解法的优化,实际提交结果还不错。
public int[] dailyTemperatures(int[] T) {
if(T.length == 0)
return T;
int[] re = new int[T.length];
for (int i = T.length - 2; i >= 0; i--) {
if(T[i] < T[i+1]) {//如果当前温度比前一天严格小
re[i] = 1;
}else {
int j = i+1+re[i+1];
while(T[j] <= T[i] && re[j] != 0) {
j += re[j]; //每次都直接找第一个比当前元素大的
}
if(T[j] > T[i])
re[i] = j - i;
}
}
return re;
}
也有点动态规划那味了