题目
给定一个整数数组 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
题解
思路一
使用双层循环,找到离当前温度最近的后面的高温度
代码实现
/**
* @param {number[]} temperatures
* @return {number[]}
*/
const dailyTemperatures = function (temperatures) {
// 先全部置为0
const result = temperatures.map(v => 0);
for (let i = 0, len = temperatures.length; i < len - 1; i++) {
for (let j = i + 1; j < len; j++) {
// 找到后面的比它高的温度,然后跳出循环
if (temperatures[j] > temperatures[i]) {
result[i] = j - i;
break;
}
}
}
return result;
};
思路二
使用单调栈
代码实现
/**
* @param {number[]} temperatures
* @return {number[]}
*/
const dailyTemperatures = function (temperatures) {
// 新建一个栈
const stack = [];
const result = temperatures.map(v => 0);
for (let i = 0, len = temperatures.length; i < len; i++) {
const temperature = temperatures[i];
// 如果当前温度比栈顶元素下标对应的温度高,则出栈;此时温度即为离栈顶元素最近的温度
while (stack.length && temperature > temperatures[stack[stack.length - 1]]) {
const index = stack.pop();
result[index] = i - index;
}
stack.push(i)
}
return result;
};