思路:循环,所以从后往前执行两次单调栈

    1. vector<int> nextGreaterElements(vector<int>& nums) {
    2. if(nums.empty())return {};
    3. int len = nums.size();
    4. vector<int> ans(len, 0);
    5. stack<int> s;
    6. for(int i = len - 1;i >= 0;--i){
    7. while(!s.empty() && nums[i] >= s.top())s.pop();
    8. if(s.empty())ans[i] = -1;
    9. else ans[i] = s.top();
    10. s.push(nums[i]);
    11. }
    12. for(int i = len - 1;i >= 0;--i){
    13. while(!s.empty() && nums[i] >= s.top())s.pop();
    14. if(s.empty())ans[i] = -1;
    15. else ans[i] = s.top();
    16. s.push(nums[i]);
    17. }
    18. return ans;
    19. }