一、题目描述
给定一个整数数组 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]
二、解题
栈
使用一个栈保存数组下边,并通过对比当前下标对应的值与栈中元素对应的值,若当前值大于栈中下标对应的值,则出栈,计算下标之差,保存至返回数组中,否则入栈。
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
//其实就是找下一个值比当前值大的下标,下边值相减就是差几天;
Stack<Integer> indexs = new Stack<Integer>();
int n = temperatures.length;
int[] res = new int[n];
for(int index=0;index<n;index++){
while(!indexs.isEmpty()&&temperatures[index]>temperatures[indexs.peek()]){
int preindex = indexs.pop();
res[preindex] = index - preindex;
}
//将每一个元素的下标值存入到栈中
indexs.add(index);
}
return res;
}
}