方法一:暴力法
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
for(int i=0;i<nums1.size();i++){
int j=0;
while(j<nums2.size() && nums1[i] != nums2[j]) //找到自己位置
j++;
while(j<nums2.size() && nums2[j]<=nums1[i]) //寻找比自己大的下一个元素
j++;
if(j<nums2.size()) //判断是否越界
res.push_back(nums2[j]);
else
res.push_back(-1);
}
return res;
}
};
方法二:单调栈
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
stack<int> st;
map<int,int> mp;
for(int i=nums2.size()-1; i>=0; i--){
while(!st.empty() && nums2[i] > st.top())
st.pop(); //把矮个子的人全部去掉
int num = st.empty()?-1:st.top();
mp.insert(make_pair(nums2[i], num));
st.push(nums2[i]);
}
for(int j = 0; j < nums1.size(); j++)
res.push_back(mp[nums1[j]]);
return res;
}
};