本题与 下一个更大元素Ⅰ的区别在于数组是循环数组,继而可以在遍历到最后一个数组元素后,循环去重新遍历
那么只要将遍历的循环数组 模拟为 一个完整的数组 长度为 nums.size(), 再加上 一个完整的数组 前 nums.size() - 1个元素,这样我们就可以将这个新序列当作普通序列,对每个元素求下一个更大元素。
在遍历时,对 i 取余即可完成循环遍历
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
vector<int> ans(nums.size(), -1);
stack<int> st;
int n = nums.size();
st.push(0);
for(int i = 1; i < 2 * n - 1; i++){
if(nums[i % n] <= nums[st.top()]){
st.push(i % n);
}else{
while(!st.empty() && nums[i % n] > nums[st.top()]){
ans[st.top()] = nums[i % n];
st.pop();
}
st.push(i % n);
}
}
return ans;
}
};