文章目录

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;
    }
};