一、题目
二、代码
class Solution
{
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2)
{
int i,j;
vector<int> result(nums2.size(),0); //单调的结果
vector<int> return_vector(nums1.size(),-1);
stack<int> st;
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(); //下标差
st.pop();
}
st.push(i);
}
}
// for(i=0;i<result.size();i++) std::cout<<" "<<result[i];
// std::cout<<std::endl;
for(i=0;i<nums1.size();i++)
{
for(j=0;j<nums2.size();j++)
{
if(nums1[i]==nums2[j])
{
if(result[j]==0) return_vector[i]=-1; //如果没有下一个更大 赋值为-1
else return_vector[i]=nums2[j+result[j]]; //否则 赋值为下一个更大的元素值
}
}
}
return return_vector;
}
};