#include <vector> class Solution { public: //使用单调栈,找到离自己最近的比他大的值,单调递减栈,保留局部最大值, //因为可以循环,若按照不能循环的情况,栈中最开始没有元素,所以先让开始的时候就有前面的单调递减值 vector<int> nextBigger(vector<int>& nums) { int n = nums.size(); vector<int> res(n); stack<int> stk; for(int i=n-2; i >= 0; --i){ //初始化 while(!stk.empty() && nums[i] >= stk.top())stk.pop(); stk.push(nums[i]); } for(int i=n-1; i>=0; --i){ while( !stk.empty() && nums[i] >= stk.top()){ stk.pop(); } res[i] = stk.empty()? -1:stk.top(); stk.push(nums[i]); } return res; } };