1. 程式人生 > >兩個數組的交集II

兩個數組的交集II

不能 數組的交集 順序 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