题目描述
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
示例 2:输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]
示例 3:输入: temperatures = [30,60,90]
输出: [1,1,0]提示:
1 <= temperatures.length <= 105
30 <= temperatures[i] <= 100
做题思路
本题虽然可以用暴力求解,但是也可以用栈来实现
需要注意一点的就是我们存到栈中的元素是数组元素的下标,然后通过遍历数组,每次我们将遍历到的 “温度值” 和栈中的元素比较,如果大于栈中的元素,此时我们就可以利用栈中存的下标元素定位到数组中的位置,并且可以通过 当前遍历元素的下标减去 栈中元素的值得到结果值
代码实现
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
Stack<Integer> stack=new Stack<>();
for(int i=0;i<temperatures.length;i++){
if(stack.isEmpty() || temperatures[stack.peek()] >= temperatures[i]){
stack.push(i);
}else{
while(!stack.isEmpty()&& temperatures[stack.peek()] < temperatures[i]){
int index=stack.peek();
temperatures[index]=i-index;
stack.pop();
}
stack.push(i);
}
}
while(!stack.isEmpty())temperatures[stack.pop()]=0;
return temperatures;
}
}