Problem:496. 下一个更大元素 I
思路:由于num1和nums2都没有重复元素,且nums1是nums2的子集,数据范围只有1000,所以我们可以暴力枚举nums1中每个数字对应在nums2中的位置,最后只要在num2中跑一遍单调栈模板,只有在nums1中的数字才去更新答案就好了。
Accode:
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
unordered_map<int,int> dict;
vector<int> ans(nums1.size(),-1);
stack<int> sta;
for(int i=0;i<nums1.size();i++){
for(int j=0;j<nums2.size();j++){
if(nums1[i]==nums2[j]){
dict[j] = i;
}
}
}
for(int i=0;i<nums2.size();i++){
while(sta.size() && nums2[sta.top()]<nums2[i]){
if(dict.find(sta.top())!=dict.end()){
ans[dict[sta.top()]] = nums2[i];
}
sta.pop();
}
sta.push(i);
}
return ans;
}
};
时间复杂度: $o(n^2)$