题干:
代码:
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
stack<int>st;
vector<int>res(nums.size(), -1);
if(nums.size() == 0)return res;
st.push(0);
for(int i = 1; i < nums.size() * 2; i++)
{
if(nums[i % nums.size()] <= nums[st.top()])st.push(i % nums.size());
else
{
while(!st.empty() && nums[i % nums.size()] > nums[st.top()])
{
int index = st.top();
res[index] = nums[i % nums.size()];
st.pop();
}
st.push(i % nums.size());
}
}
return res;
}
};
本题解法精妙点:将遍历循环数组转变为等价的二次遍历数组=>将遍历结束条件改为两倍数组size以及用巧妙的 i % nums.size() 表示当前遍历到的元素下标。