一、题目
二、代码
class Solution
{
public:
vector<int> nextGreaterElements(vector<int>& nums)
{
int i,j;
vector<int> result(2*nums.size(),-1); //单调栈
vector<int> return_vector(2*nums.size(),-1); //最终结果
vector<int> nums2;
stack<int> st;
for(i=0;i<2;i++) //变成两倍长度
{
for(j=0;j<nums.size();j++)
{
nums2.push_back(nums[j]);
}
}
// for(i=0;i<nums2.size();i++) std::cout<<" "<<nums2[i];
// std::cout<<std::endl;
st.push(0);
for(i=0;i<nums2.size();i++) //完成单调栈
{
if(nums2[i]<nums2[st.top()])
{
st.push(i);
}
else if(nums2[i]==nums2[st.top()])
{
st.push(i);
}
else
{
while(!st.empty()&&nums2[i]>nums2[st.top()])
{
result[st.top()]=i-st.top(); //为了保持单调栈的完整 这里没有删除
return_vector[st.top()]=nums2[i]; //这是这题最后的结果
st.pop();
}
st.push(i);
}
}
// for(i=0;i<result.size();i++) std::cout<<" "<<result[i];
// std::cout<<std::endl;
result.resize(nums.size()); //裁剪回一倍的长度
return_vector.resize(nums.size()); //裁剪回一倍的长度
return return_vector;
}
};