题目描述:
示例 1:
示例 2:
示例 3:
提示:
解法一:暴力法
思路:
使用双重循环遍历数组即可。
代码:
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int[] res = new int[temperatures.length];
for (int i = 0; i < temperatures.length - 1; i++) {
for (int j = i + 1; j < temperatures.length; j++) {
if (temperatures[j] > temperatures[i]) {
res[i] = j - i;
break;
}
}
}
return res;
}
}
解法二:栈
思路:
1、使用栈维护数组下标。
2、遍历数组:
- 当前元素小于或者等于栈顶元素,将当前元素下标入栈
- 当前元素大于栈顶元素,先弹出栈中小于当前元素值的元素下标val=stack.pop(),并将当前下标与val的差值作为结果集的元素,即:result[val] = i - val;
代码:
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
//结果数组
int[] result = new int[temperatures.length];
//辅助栈
Stack<Integer> stack = new Stack<>();
for(int i=0; i < temperatures.length; i++){
//当栈不为空,且栈顶元素小于当前当前元素时,出栈并计算天数
while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){
int val = stack.pop();
result[val] = i -val;
}
//将下标入栈
stack.push(i);
}
return result;
}
}