123456789101112131415161718192021
class Solution {public: vector<int> nextGreaterElements(vector<int> &nums) { int n = nums.size(), x; stack<int> stk; vector<int> res(n); // 破环成链,将原本的环变成两个nums的链条 nums.insert(nums.end(), nums.begin(), nums.end()); for (int i = 2 * n - 1; i >= 0; i--) { x = nums[i]; while (stk.size() && x >= stk.top()) stk.pop(); // 结果只存放0到nums.size()-1之间的数 if (i < n) { if (stk.empty()) res[i] = -1; else res[i] = stk.top(); } stk.push(x); } return res; }};