今天的题目链接放在这里了:739. 每日温度 - 力扣(LeetCode)
这道题的要求就是给定一个数组,里面表示一组相邻日期的温度,题目的要求就是要让我们返回一个同等大小的数组,每一个位置的值是对应位置日期的温度在多少天之后会上涨,如果不会上涨就为0,例如:
temperatures = [73,74,75,71,69,72,76,73],ans = [1,1,4,2,1,1,0,0]
对于这题我们的思路是利用一个单调栈来实现,单调栈就是确保栈中是按单调递减或单调递增的规则进行数据存储,如果有打破规则的就让对应位置出栈,确保满足规则。对于这个题我的思路是这样的,先创建一个res数组存储结果,一个栈存储的数据类型是一个大小为2的数组,一个位置存储temperature下标和下标对应位置的值,遍历一遍数组,每个位置进栈之前做一个判断,判断栈为空的前提下栈顶元素的值是否小于temperature当前位置的值,如果小于就把res[下标]对应位置的值设置为i-下标,从而实现对每个位置的值进行填写,没有填写的位置也就是不会上升的位置默认就为0了,到此位置,问题完美解决,我的代码放在下面了:
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
if(temperatures == null || temperatures.length == 0){
return null;
}
int[] res = new int[temperatures.length];
//[下标,值]
Deque<Integer[]> stack = new LinkedList<>();
for(int i = 0;i<temperatures.length;i++){
Integer[] top = stack.peek();
while(!stack.isEmpty()&&temperatures[i] > top[1]){
res[top[0]] = i - top[0];
stack.pop();
top = stack.peek();
}
Integer[] cur = {i,temperatures[i]};
stack.push(cur);
}
return res;
}
}

517

被折叠的 条评论
为什么被折叠?



