链接
https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/
耗时
解题:10 min
题解:5 min
题意
给定两个数组,编写一个函数来计算它们的交集。
思路
对两个数组分别排序。然后使用两个指针从头到尾扫描,如果两指针指向的元素相等,将这个元素加入答案,并将两指针同时向后移一位;若不相等,将较小元素对应的指针向后移一位。
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
AC代码
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
int n = nums1.size();
int m = nums2.size();
if(n == 0 || m == 0) return {};
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
int i = 0, j = 0;
vector<int> ans;
while(i < n && j < m) {
if(nums1[i] == nums2[j]) {
ans.push_back(nums1[i]);
i++;
j++;
}
else {
if(nums1[i] < nums2[j]) {
i++;
}
else if(nums1[i] > nums2[j]) {
j++;
}
}
}
return ans;
}
};