我的解法:找到一个,添加一个,删除一个
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
if(nums1.size()==0||nums2.size()==0);
vector<int> jiaoji;
sort(nums1.begin(),nums1.end());sort(nums2.begin(),nums2.end());
for(int i=0;i<nums1.size();i++){
for(int j=0;j<nums2.size();j++){
if(nums1[i]>nums2[j])
continue;
if(nums1[i]==nums2[j])
{
jiaoji.push_back(nums1[i]);
nums2.erase(nums2.begin()+j);
break;
}
if(nums1[i]<nums2[j])
break;
}
}
return jiaoji;
}
解法一:同时循环迭代,节省时间同时没改变输入数组
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> result = {};
if(nums1.empty() || nums2.empty())
return result;
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
int i1 = 0, i2 = 0;
while(i1 != nums1.size() && i2 != nums2.size()) {
if(nums1[i1] < nums2[i2]) i1++;
else if(nums1[i1] > nums2[i2]) i2++;
else {
result.push_back(nums1[i1]);
i1++;
i2++;
}
}
return result;
}
解法二:使用map的性质
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> result;
if(nums1.size()==0||nums2.size()==0) return result;
unordered_map<int,int> hash;
for(int i=0; i<nums1.size(); i++){
if(hash.count(nums1[i])==0)
hash.insert(make_pair(nums1[i],1));
else hash[nums1[i]]++;
}
for(int j=0; j<nums2.size(); j++){
if(hash.count(nums2[j])>0&&hash[nums2[j]]>=1) {
result.push_back(nums2[j]);
hash[nums2[j]]--; } }
return result;
}