排序实现
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> x;
int j;
sort(nums1.begin(),nums1.end()); //排序预处理
sort(nums2.begin(),nums2.end());
for (int i = 0, j = 0; i < nums1.size() && j < nums2.size(); ) {
if (nums1[i] < nums2[j]) { //如果第一个数组中的第一个值小于第二个数组第一个值
i++; //数组一向右移动
} else if (nums1[i] > nums2[j]) { //否则数组二移动
j++;
} else { //如果相等
x.push_back(nums1[i]) //同时移动;
i++;
j++;
}
}
return x;
}
};
哈希表实现
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
if (nums1.size() > nums2.size()) {
return intersect(nums2, nums1);
}
unordered_map <int, int> m;
for (int num : nums1) {
++m[num];
}
vector<int> intersection;
for (int num : nums2) {
if (m.count(num)) { //判断是否存在这个元素是为1否为0
intersection.push_back(num); //压入容器
--m[num];
if (m[num] == 0) {
m.erase(num); //去除槽中元素
}
}
}
return intersection;
}
};