349 两个数组的交集
本文最后更新于:2022年8月30日 晚上
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
示例 2:
说明:
- 输出结果中的每个元素一定是唯一的。
- 我们可以不考虑输出结果的顺序。
Solution
- 利用 set ,底层数据结构为 平衡二叉树 。
- 时间复杂度 O(nlogn)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { set<int> record; for(int num : nums1) record.insert(num); set<int> resultSet; for(int i=0; i<nums2.size(); ++i){ if(record.find(nums2[i]) != record.end()) resultSet.insert(nums2[i]); }
vector<int> res(resultSet.begin(), resultSet.end()); return res; } };
|
- 利用 unordered_set,底层数据结构为 哈希表 。
- 时间复杂度 O(n) ( n = len(nums1)+len(nums2) )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { unordered_set<int> record; for(int num : nums1) record.insert(num); unordered_set<int> resultSet; for(int i=0; i<nums2.size(); ++i){ if(record.find(nums2[i]) != record.end()) resultSet.insert(nums2[i]); }
vector<int> res(resultSet.begin(), resultSet.end()); return res; } };
|
java
| class Solution { public int[] intersection(int[] nums1, int[] nums2) { Set<Integer> set1 = new HashSet<>(); Set<Integer> record = new HashSet<>();
for (int num : nums1) { set1.add(num); } for (int num : nums2) { if (set1.contains(num)) { record.add(num); } } return record.stream().mapToInt(x -> x).toArray(); } }
|