本题涉及单调栈
//单调栈
//nums1 = [4,1,2], nums2 = [1,3,4,2]
//nums1 = [4,1,2], nums2 = [6,4,7,8]
//[1,3,5,2,4] [6, 5, 4, 3, 2, 1, 7]
//[2,4] [1, 2, 3, 4]
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
map<int, int> mp;
vector<int> stack;
bool flags = true;
stack.push_back(nums2[0]);
int top;
top = stack[stack.size() - 1];
for (int i = 1; i < nums2.size(); i++){
while (flags && stack.size() != 0){
top = stack[stack.size() - 1];
if (top < nums2[i]){
mp.insert(make_pair(top, nums2[i]));
stack.pop_back();
if (stack.size() == 0) stack.push_back(nums2[i]);
//stack.push_back(nums2[i]);
}
else{
stack.push_back(nums2[i]);
break;
}
}
}
mp.insert(make_pair(nums2[nums2.size() - 1], -1));
for (int j = 0; j < nums1.size(); j++){
res.push_back(-1);
}
map<int, int>::iterator itor;
for (int j = 0; j < nums1.size(); j++){
if (mp.find(nums1[j]) != mp.end()){
itor = mp.find(nums1[j]);
res[j] = itor->second;
}
}
return res;
}