leetcode349_两个数组的交集
一、题目
二、题目分析
这个让我想起来之前有一道题目的算法分析,就是对于两个数组分别排序,然后使用不同的指针,如果不相等则不断从前向后移动,则可以一次遍历就解决了问题,但是可能排序是需要一定的时间的,但是总体来说时间复杂度还是O(m+n)的。
代码如下:
class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { sort(nums1.begin(), nums1.end()); sort(nums2.begin(), nums2.end()); int length1 = nums1.size(); int length2 = nums2.size(); vector<int> final_num; //遍历查找 int search1=0; int search2=0; while(search1length2){ if(search1 !=0 ){ if(nums1[search1] == nums1[search1-1]) { search1++; continue; } } if(search2 !=0 ){ if(nums2[search2] == nums2[search2-1]) { search2++; continue; } } if(nums1[search1] == nums2[search2]){ final_num.push_back(nums1[search1]); search1++; search2++; } else if(nums1[search1] > nums2[search2]){ search2++; } else{ search1++; } //std::cout<<"result: "< } return final_num; } };
三、参考代码
class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { unordered_set<int> result_set; // 存放结果 unordered_set<int> nums_set(nums1.begin(), nums1.end()); for (int num : nums2) { // 发现nums2的元素 在nums_set里又出现过 if (nums_set.find(num) != nums_set.end()) { result_set.insert(num); } } return vector<int>(result_set.begin(), result_set.end()); } };
使用了哈希set,主要可以去重,然后实现快速查找,也是很好的思路,主要使用的类型是unoerdered_set