题目:
给你两个 没有重复元素 的数组 nums1
和 nums2
,其中nums1
是 nums2
的子集。
请你找出 nums1
中每个元素在 nums2
中的下一个比其大的值。
nums1
中数字 x
的下一个更大元素是指 x
在 nums2
中对应位置的右边的第一个比 x
大的元素。如果不存在,对应位置输出 -1
。
示例 1:
输入: nums1 = [4,1,2], nums2 = [1,3,4,2]. 输出: [-1,3,-1] 解释: 对于 num1 中的数字 4 ,你无法在第二个数组中找到下一个更大的数字,因此输出 -1 。 对于 num1 中的数字 1 ,第二个数组中数字1右边的下一个较大数字是 3 。 对于 num1 中的数字 2 ,第二个数组中没有下一个更大的数字,因此输出 -1 。
代码:
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
//单调栈的应用
vector<int> result;
unordered_map<int,int> map_n;
stack<int> stack_n;
if(nums2.size() == 0) return result;
stack_n.push(nums2[0]);
for(int i=1;i<nums2.size();++i){
while(!stack_n.empty() && nums2[i] > stack_n.top()){
map_n[stack_n.top()] = nums2[i];
stack_n.pop();
}
stack_n.push(nums2[i]);
}
while(!stack_n.empty()){
map_n[stack_n.top()] = -1;
stack_n.pop();
}
for(int i=0;i<nums1.size();++i){
result.push_back(map_n[nums1[i]]);
}
return result;
}
};