单调栈——每日温度
Posted vector6_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单调栈——每日温度相关的知识,希望对你有一定的参考价值。
每日温度
请根据每日
气温
列表temperatures
,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用0
来代替。示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73] 输出: [1,1,4,2,1,1,0,0]
class Solution
public:
vector<int> dailyTemperatures(vector<int>& temperatures)
int n = temperatures.size();
vector<int> res(n, 0);
std::stack<int> st;
for(int i = temperatures.size()-1; i>=0; --i)
while(!st.empty() && temperatures[st.top()]<=temperatures[i])
st.pop();
res[i] = st.empty()?0:st.top()-i;
st.push(i);
return res;
;
当题目出现「找到最近一个比其大的元素」的字眼时,自然会想到「单调栈」。使用单调栈,逆向遍历,这里保存的值为索引而不是元素值。最终的结果数组需要计算栈顶索引与当前索引的距离。(遍历整个数组,如果栈不空,且当前数字大于栈顶元素,那么如果直接入栈的话就不是 递减栈 ,所以需要取出栈顶元素,由于当前数字大于栈顶元素的数字,而且一定是第一个大于栈顶元素的数,直接求出下标差就是二者的距离。)
以上是关于单调栈——每日温度的主要内容,如果未能解决你的问题,请参考以下文章