力扣-739-每日温度

返回一个数组,ans[i]表示相对于第i天的温度而言,下一个更高的温度出现在几天后
如果没有就是0

一开始接单粗暴地两层for循环遍历,不出意外地超时了
后来又想到可以排序后比对位置,但是数组中可能出现重复的元素,于是又被否决了

官方题解给出的是用“单调栈”

虽然不理解是怎么想到的以及为什么这样是正确的,但是先会用

vector<int> dailyTemperatures(vector<int>& temperatures) {
	int n = temperatures.size();
	vector<int> ans(n);
	stack<int> stk;

	for (int i = 0; i < n; i++) {
		while (!stk.empty() && temperatures[i] > temperatures[stk.top()]) {
			int preIndex = stk.top();
			ans[preIndex] = i - preIndex;
			stk.pop();
		}
		stk.push(i);
	}
	return ans;
}

为什么push一定要放在后面呢?

posted @ 2022-12-20 16:29  YaosGHC  阅读(27)  评论(0)    收藏  举报