1.题目
示例 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]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/daily-temperatures
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
- 思路:问题是找下一个比当前数字大的数字的距离,使用递减栈Descending Stack
我们遍历数组,如果栈不空,且当前数字大于栈顶元素,直接求出下标差就是二者的距离了;
否则,将数字的下标继续入栈,这样就可以一直保持递减栈
2.代码
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
vector<int> res;
stack<int> st;
for (int i=0;i<temperatures.size();++i)
{
while (!st.empty() && temperatures[i] > temperatures[st.top()])
{
int index_from_st=st.top();st.pop();
res[index_from_st]=i-index_from_st;
}
st.push(i);
}
return res;
}
};