题目来源:leedcode
class Solution {
public:
vector<int> nextGreaterElement(const vector<int>& nums1, const vector<int>& nums2) {
vector<int> result;
if (nums1.empty()||nums2.empty())
return result;
stack<int> monoStack;//单调栈
map<int, int> memoMap;//结果记录
//通过一次遍历就可以求出所有元素的下一个更大元素,十分高效
for (int n2 : nums2) {
while (!monoStack.empty() && monoStack.top() < n2) {
memoMap[monoStack.top()] = n2;
monoStack.pop();
}
monoStack.push(n2);
}
while (!monoStack.empty())
{
memoMap[monoStack.top()] = -1;
monoStack.pop();
}
//整理结果
for (int n1 : nums1) {
result.push_back(memoMap[n1]);
}
return result;
}
};