单调栈的结构理解起来很简单,如果是寻找下一个比当前元素大的元素,本质上就是在顺序遍历时,遇到比栈顶元素大的元素前持续出栈,直到栈顶元素大于当前遍历元素
或者栈为空,然后将当前遍历元素
入栈
解释为代码可以如下:
当前待排序数组为1,4,0,9,6,2
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
using PII = pair<int, int>;
stack<PII> stk;
int main(){
vector<int> nums = {1,4,0,9,6,2};
int n = nums.size();
for (int i = 0; i < n; i++){
PII tmp = make_pair(nums[i], i);
while(!stk.empty() && stk.top().first < nums[i]){
//打印弹出元素的value和对应序号
cout << stk.top().first << " "<< stk.top().second << endl;
stk.pop();
}
//确保可以入栈后,将当前遍历元素入栈
stk.push(tmp);
cout << "****push"<< tmp.first << "****" << endl;
}
}
结果如下:
****push1****
1 0
****push4****
****push0****
0 2
4 1
****push9****
****push6****
****push2****