Leetcode 739 Daily Temperatures
题干:
给定一个数组 t e m p e r a t u r e s temperatures temperatures,存放的是近几天的天气气温,对于每一天,还要至少等多少天才能等到一个更暖和的气温,如果等不到就填 0 0 0。
Input: temperatures = [73,74,75,71,69,72,76,73]
Output: [1,1,4,2,1,1,0,0]
解:
单调栈模板题变形。
相当于对数组中的每个元素 a [ i ] a[i] a[i],寻找它之后比它大的第一个元素的下标 t t t, t − i t-i t−i即为所求。
vector<int> dailyTemperatures(vector<int>& temperatures) {
int n = temperatures.size();
stack<int> st;
vector<int> answer(n);
for(int i = n-1; i >= 0; i--){
while(!st.empty() && temperatures[st.top()] <= temperatures[i]){
st.pop();
}
answer[i] = st.empty() ? 0: (st.top() - i);
st.push(i);
}
return answer;
}