739. 每日温度(C++)---单调栈解题

题目详情

请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。
 


——题目难度:中等


 




使用单调栈解这题很方便。当遇到比 以栈顶元素(表示下标)为下标的元素 还大的数,说明该天就是更高的气温,而等待的天数即为i - st.top(),随后移除栈顶元素即可;当遇到 不大于 以栈顶元素(表示下标)为下标的元素 的数,说明该天不是更高的气温,则将该元素的下标 入栈。


-解题代码

class Solution {
public:
    vector dailyTemperatures(vector& T) {
    		int n = T.size();
			stack st; //该单调栈st 存储的是 下标的值
			vector ans(n,0); 
			
			for(int i=0; i T[st.top()]) {
					//ans.push_back(i - st.top());
					int t = st.top();
					ans[t] = i - t;
					st.pop();
				}	
				st.push(i);
			}
					
			return ans;			 	
    }
};

 

你可能感兴趣的:(LeetCode-解题记录,栈,leetcode,C++,单调栈)