Problem:503. 下一个更大元素 II
思路:既然是循环数组,我们可以把元素都复制一遍添加到原数组后面,这样就还是可以用单调栈模板了,直接泡一下模板取一下模就好了。
Accode:
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int len = nums.size();
vector<int> ans(len,-1);
nums.insert(nums.end(),nums.begin(),nums.end());
stack<int> sta;
for(int i=0;i<nums.size();i++){
while(sta.size() && nums[sta.top()]<nums[i]){
ans[sta.top()%len] = nums[i];
sta.pop();
}
sta.push(i);
}
return ans;
}
};
时间复杂度:$o(n)$