题意描述:
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
利用单调栈
先定义一个长度等于原始长度的容器,并且均赋值为0,之后遍历temperatures数组,如果当前数字大于栈顶元素,这个数字一定是第一个大于栈顶元素的数,所以直接进行下标的求差值就是当前元素和栈顶元素的距离。
之后以此类推
完整C++代码如下:
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int n = temperatures.size();
vector<int> result(n, 0);
stack<int> st;
for(int i = 0; i < temperatures.size(); i++){
while(!st.empty() && temperatures[i] > temperatures[st.top()]){
int ans = st.top();
st.pop();
result[ans] = i - ans;
}
st.push(i);
}
return result;
}
};