题目
请根据每日气温列表 temperatures ,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
思路
- 用数组模拟单调栈stack,起始为空
- 创建一个和温度temperatures一样长度的数组,都填充为0,是为了如果这天的温度之后几天没有更高的温度,就为0,节省计算
- 遍历temperatures,如果stack为空,push进去第一个温度的索引,之后栈不为空,当temperatures[i]的温度值大于栈顶索引对应的温度值,栈中这个索引出栈,并且创建一个变量获取到,这个i入栈,以此类推
- arr数组存储索引差,为观测到更高的气温,至少需要等待的天数
代码
/**
* @param {number[]} temperatures
* @return {number[]}
*/
var dailyTemperatures = function(temperatures) {
// 单调栈存的是索引
var stack = []
var arr = new Array(temperatures.length).fill(0)
for(let i = 0; i < temperatures.length; i++){
while(stack.length && temperatures[stack[stack.length - 1]] < temperatures[i]){
// 拿到出栈的索引
const index = stack.pop()
// arr存储索引差,为这一天与后面高温度的间隔日期
arr[index] = i - index
}
stack.push(i)
}
return arr
};
总结
主要还是理解了题目要干什么,然后思考用什么数据结构来实现