https://leetcode.com/problems/daily-temperatures/description/
题目:给出一个数组,对每个位置,在当前位置后面找出最近的比当前位置大的数,求出位置差。
思路:维护一个值单调递减的栈(栈中的元素是数组元素的下标),当前元素大于栈顶元素,将栈顶元素出栈,直到栈空或者当前元素小于栈顶元素为止。在结果数组中记录结果(当前下标减去栈顶元素)。更新当前元素。直到遍历所有元素。
例如 temperatures = [73, 74, 75, 71, 69, 72, 76, 73] .
下标 栈 结果数组
0 0 0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
2 2 1 1 0 0 0 0 0 0
3 2 3 1 1 0 0 0 0 0 0
4 2 3 4 1 1 0 0 0 0 0 0
5 2 5 1 1 0 2 1 0 0 0
6 6 1 1 4 2 1 1 0 0
7 6 7 1 1 4 2 1 1 0 0
代码
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
stack<int>s;
vector<int>v(temperatures.size(),0);
for(int x=0;x<temperatures.size();x++){
while(!s.empty()&&temperatures[s.top()]<temperatures[x]){
v[s.top()] = x - s.top();
s.pop();
}
s.push(x);
}
while(!s.empty()){
v[s.top()] = 0;
s.pop();
}
return v;
}
};