今天学习了一种新的数据结构的应用:单调栈
- 单调栈的适用性其实不算大,但是对于求「一个序列中每一个元素的左边或者右边第一个大于(或小于)自身的元素」时非常好用,下面贴出求右边第一个大于自身元素的模版代码
vector<int> monotonousStack(vector<int>& nums){
int n = nums.size();
stack<int> rec;
vector<int> ans(n);
for(int i = n-1; i >= 0; --i){
while(rec.size() && rec.top() <= nums[i])
rec.pop();
ans[i] = (rec.empty() ? -1 : rec.top());
rec.push(nums[i]);
}
return ans;
}