501-510¶
503. 下一个更大元素 II¶
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;
}
};