leetcode350 两个数组的交集
还是用了暴力算法,因为别的写不出来,效率极低,nnd,贴代码
class Solution { public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { int m = nums1.size(); int n = nums2.size(); vector<vector<int> > good(m,vector<int>(n,0)); vector<int> nice; for(int i = 0 ; i < m ; i++) { for(int j = 0 ; j < n ; j++) { if(nums1[i] == nums2[j] && good[i][j]!=-1) { good[i][j] = 1; nice.push_back(nums1[i]); for(int k = 0 ; k < m ; k++) { if(k!=i) good[k][j] = -1; } for(int k = 0 ; k < n ; k++) { if(k!=j) good[i][k] = -1; } } } } return nice; } };
之后是哈希表的做法,首先找到一个长度较小的数组,进行遍历,并将其中的元素放入哈希表,并记录个数。之后就遍历第二个数组,每遇到一个哈希表中存在的数,就将对应的数目减一,并将该元素存入需返回的数组中,很秀。
class Solution { public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { int m = nums1.size(); int n = nums2.size(); if(m>n) { intersect(nums2, nums1); } unordered_map<int,int> good; for(int i:nums1) { good[i]++; } vector<int> nice; for(int i:nums2) { if(good[i]>0) { good[i]--; nice.push_back(i); } } return nice; } };

浙公网安备 33010602011771号