-
- class Solution {
- public:
- vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
- // 先对两个数组进行排序
- sort(nums1.begin(), nums1.end());
- sort(nums2.begin(), nums2.end());
- int length1 = nums1.size(), length2 = nums2.size();
- vector<int> intersection;
- int index1 = 0, index2 = 0;
- while (index1 < length1 && index2 < length2) {
- if (nums1[index1] < nums2[index2]) {
- // 如果index1指向的值小于index2指向的值,,说明index1指向的值小了,index1往后移一步
- index1++;
- } else if (nums1[index1] > nums2[index2]) {
- index2++;
- } else {
- intersection.push_back(nums1[index1]);
- index1++;
- index2++;
- }
- }
- return intersection;
- }
- };
-
- 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;
- //开始遍历大的数组,如果相同就原来的哈希表value-1;为空就删除
- for(int num:nums2)
- {
- if(m.count(num))
- {
- intersection.push_back(num);
- --m[num];
- if(m[num]==0)
- {
- m.erase(num);
- }
- }
- }
- return intersection;
- }
- };