[leetcode]350. Intersection of Two Arrays II
2016-05-21 22:19
309 查看
Given two arrays, write a function to compute their intersection.
Example:
Given nums1 =
Note:
Each element in the result should appear as many times as it shows in both arrays.
The result can be in any order.
Follow up:
What if the given array is already sorted? How would you optimize your algorithm?
What if nums1's size is small compared to num2's size? Which algorithm is better?
What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?
Subscribe to see which companies asked this question
Solution:
Example:
Given nums1 =
[1, 2, 2, 1], nums2 =
[2, 2], return
[2, 2].
Note:
Each element in the result should appear as many times as it shows in both arrays.
The result can be in any order.
Follow up:
What if the given array is already sorted? How would you optimize your algorithm?
What if nums1's size is small compared to num2's size? Which algorithm is better?
What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?
Subscribe to see which companies asked this question
Solution:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { unordered_map<int, int> ht1; unordered_map<int, int> ht2; vector<int> ret; for (int i = 0; i < nums1.size(); i++) if (ht1.find(nums1[i]) != ht1.end()) ht1[nums1[i]]++; else ht1[nums1[i]] = 1; for (int i = 0; i < nums2.size(); i++) if (ht2.find(nums2[i]) != ht2.end()) ht2[nums2[i]]++; else ht2[nums2[i]] = 1; for (auto it = ht1.begin(); it != ht1.end(); ++it) { int key = it->first; if (ht2.find(key) != ht2.end()) // get it { int min = ht2[key] < ht1[key] ? ht2[key] : ht1[key]; for (int k = 0; k < min; k++) ret.push_back(key); } } return ret; }
相关文章推荐
- hibernate实现双向一对多的映射
- 【Leetcode】Edit Distance
- JSTL常用标签的使用
- zoj3203题解
- Linux下tomcat初级
- 线性表
- 【Leetcode】Construct Binary Tree from Inorder and Postorder Traversal
- caffe学习笔记(8):Net Surgery
- 【Leetcode】Construct Binary Tree from Preorder and Inorder Traversal
- 第108课: Spark Streaming电商广告点击综合案例动态黑名单过滤真正的实现代码
- vi命令_Linux vi 命令用法详解:功能强大的纯文本编辑器
- JAVA设计模式之单例模式
- 安卓实战中防止Button的频繁点击多次执行点击事件和点击切换文字
- Kotlin笔记
- 编码规范-注释管理
- Educational Codeforces Round 11 D. Number of Parallelograms
- 动态规划专题总结
- 【算法相关】高频词汇统计系统(二)
- 满二叉树、完全二叉树、平衡二叉树、哈夫曼树
- 数据库的锁机制