可以使用双层for循环的思想,就像寻找股票的最大收益问题一样。
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int length = temperatures.length;
int[] res = new int[length];
for(int i = 0; i<length; i++){
for(int j = i+1; j<length; j++){
if(temperatures[j]>temperatures[i]){
res[i] = j-i;
break;
}
}
}
return res;
}
}
时间复杂度为o(n^2),比较耗费时间。
另一个方法是使用递减栈。
public int[] dailyTemperatures(int[] T) {
Stack<Integer> stack = new Stack<>();
int length = T.length;
int[] result = new int[length];
for (int i = 0; i < length; i++) {
while (!stack.isEmpty() && T[i] > T[stack.peek()]) {
int pre = stack.pop();
result[pre] = i - pre;
}
stack.add(i);
}
return result;
}
时间复杂度为o(n)。