首页 > 编程语言 > 详细

两个数组的交集II

时间:2019-03-21 22:27:01      阅读:109      评论:0      收藏:0      [点我收藏+]

给定两个数组,编写一个函数来计算它们的交集。

示例 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

原文:https://www.cnblogs.com/mxf1997/p/10575138.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!