class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums intvector
* @return intvector<vector<>>
*/
vector<vector<int> > foundMonotoneStack(vector<int>& nums) {
// write code here
//单调栈,按照递增或递减的形式在栈中存储
stack<int> stk;
int len=nums.size();
vector<vector<int>> ans(len,vector<int>(2));</int></int></int></int></int>
for(int j=0;j<len;j++) { int temp=nums[j]; if(stk.empty()) { ans[j][0]=-1; stk.push(j); } else { while(!stk.empty()&&nums[stk.top()]>=temp) { stk.pop(); } //如果栈已经清空表明此时左端不存在小于x的值 if(stk.empty()) { ans[j][0]=-1; } //否则当前栈顶就是小于x的左端的小标 else { ans[j][0]=stk.top(); } stk.push(j); } } stack<int> stkr; for(int j=len-1;j>=0;j--) { int temp=nums[j]; if(stkr.empty()) { ans[j][1]=-1; stkr.push(j); } else { while(!stkr.empty()&&nums[stkr.top()]>=temp) { stkr.pop(); } //如果栈已经清空表明此时左端不存在小于x的值 if(stkr.empty()) { ans[j][1]=-1; } //否则当前栈顶就是小于x的左端的小标 else { ans[j][1]=stkr.top(); } stkr.push(j); } } return ans; }
};