兩個數組的交集II
阿新 • • 發佈:2019-03-22
不能 數組的交集 順序 find count amp lse num 磁盤
給定兩個數組,編寫一個函數來計算它們的交集。
示例 1:
輸入: nums1 = [1,2,2,1], nums2 = [2,2] 輸出: [2,2]
示例 2:
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出: [4,9]
說明:
- 輸出結果中每個元素出現的次數,應與元素在兩個數組中出現的次數一致。
- 我們可以不考慮輸出結果的順序。
進階:
- 如果給定的數組已經排好序呢?你將如何優化你的算法?
- 如果 nums1 的大小比 nums2 小很多,哪種方法更優?
- 如果 nums2 的元素存儲在磁盤上,磁盤內存是有限的,並且你不能一次加載所有的元素到內存中,你該怎麽辦?
1 class Solution { 2 public: 3 vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { 4 map<int,int> m1; 5 map<int,int> m2; 6 7 for(int i=0;i<nums1.size();i++){ 8 if(m1.find(nums1[i])!=m1.end()){9 m1[nums1[i]]++; 10 }else{ 11 m1[nums1[i]]=1; 12 } 13 } 14 15 for(int i=0;i<nums2.size();i++){ 16 if(m2.find(nums2[i])!=m2.end()){ 17 m2[nums2[i]]++; 18 }else{ 19 m2[nums2[i]]=1; 20 } 21 } 22 23 map<int,int>::iterator it1; 24 map<int,int>::iterator it2; 25 vector<int> result; 26 27 for(it1=m1.begin();it1!=m1.end();it1++){ 28 it2=m2.find(it1->first); 29 if(it2!=m2.end()){ 30 int counter = it1->second >= it2->second ? it2->second : it1->second; 31 for(int i=0;i<counter;i++){ 32 result.push_back(it1->first); 33 } 34 } 35 } 36 37 return result; 38 39 40 } 41 };
兩個數組的交集II