示例代码

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& temperatures) {
        int len=temperatures.size();
        stack<int> stk;
        vector<int> res(len,-1);
        for(int i=0;i<len*2;i++){
            while(!stk.empty()){
                int topElem=stk.top();
                if(temperatures[topElem]<temperatures[i%len]){
                    stk.pop();
                    res[topElem]=temperatures[i%len];
                }else{
                    break;
                }
            }
            stk.push(i%len);
        }
        return res;
    }
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

效果展示

LeetCode---503. 下一个更大元素 II(单调栈,循环数组的处理方法:for(int i=0;i<len*2;i++),temperatures[i%len])_i++