当前位置: 代码迷 >> 综合 >> [LeetCode] Intersection of Two Array | 两个数组找交集
  详细解决方案

[LeetCode] Intersection of Two Array | 两个数组找交集

热度:47   发布时间:2023-12-22 05:40:17.0

https://leetcode.com/problems/intersection-of-two-arrays/?tab=Description

一开始没弄清题意,以为是像intersection of two linked lists那样找交点,但实际上不是。其实是找两个数组的交集,即把两个数组中都有的元素不重不漏地找出来,所以其实比linked list的交点要简单。

思路1:Hash Set

首先把一个数组的所有元素放到一个Hash Set中,然后扫描另一个数组,在Hash Set中查找是否存在,同时再建立一个Hash Set,把已经找到的属于交集的元素放进去(目的是避免元素被重复加入结果数组)。

Time complexity: O(n + m)
Space complexity: O(n + m) 其中n, m分别表示两个数组的元素个数

class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> s, tmp;vector<int> ret;for (int i : nums1) {s.insert(i);}for (int j : nums2) {if (s.find(j) != s.end() && tmp.find(j) == tmp.end()) {ret.push_back(j);tmp.insert(j);}}return ret;} };

下面两种思路,是参考网上的其他解答。

思路2:merge two sorted arrays

先将两个数组排好序,然后模拟合并排序数组的操作(但不用真开一个辅助数组),合并过程中遇到相等的就放入结果数组,注意要判断是否unique。由于结果数组是有序的,所以只要与最后一个比较(如果有的话)看是否相等即可。

Time complexity: O(nlogn + mlogm)
Space complexity: O(1)

class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());// merge two sorted arraysvector<int> ret;int i = 0, j = 0;while (i < nums1.size() && j < nums2.size()) {if (nums1[i] == nums2[j]) {if (ret.size() == 0 || (ret.size() > 0 && nums1[i] != ret[ret.size()-1])) {ret.push_back(nums1[i]);}i++; j++;} else if (nums1[i] < nums2[j]) {i++;} else {j++;}}return ret;} };

先将其中一个数组排序,然后遍历另一个数组,并对排序数组进行二分查找以确定交集。

Time complexity: O(nlogn + mlogn)
Space complexity: O(m)

class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {if (nums1.empty() || nums2.empty()) {return vector<int>();}sort(nums1.begin(), nums1.end());unordered_set<int> s;for (int i = 0; i < nums2.size(); ++i) {vector<int>::iterator it = lower_bound(nums1.begin(), nums1.end(), nums2[i]);if (*it == nums2[i]) {s.insert(nums2[i]);}}vector<int> ret(s.size());int k = 0;for (int ele : s) {ret[k++] = ele;}return ret;} };

转载于:https://www.cnblogs.com/ilovezyg/p/6411466.html

  相关解决方案