题目
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例 1:
temperatures
示例 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
解题思路
本题需要找出比当前index的元素大的下一个index距离当前index的差值,需要2层遍历temperatures数组。可用stack来存储遍历到的index值,首先把index为0压入stack中,然后初始化answer数组,且里面元素都为0,再在第二层循环中判断当前i的温度是否大于stack栈顶的温度,则找到了一个满足下个温度高的,更新answer数组。同时需要清空stack,否则统计不出下一个温度高的index. 最后返回answer数组。
代码实现
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int n = temperatures.size();
vector<int> answer(n, 0);
stack<int> st;
for (int i = 0; i < n; i++) {
while (!st.empty() && temperatures[i] > temperatures[st.top()]) {
answer[st.top()] = i - st.top();
st.pop();
}
st.push(i);
}
return answer;
}
};