c++中如何求两个数组的交集_c++数组交集实现方法

答案:C++中求两数组交集常用三种方法:①排序+双指针,时间复杂度O(m log m + n log n),适合可排序数组;②哈希表法,时间复杂度O(m + n),无需排序且自动去重;③STL的set_intersection,仅适用于有序数组,代码简洁但可能含重复元素。

c++中如何求两个数组的交集_c++数组交集实现方法

在C++中求两个数组的交集,常见做法是利用排序和双指针,或使用哈希表来提高查找效率。以下是几种实用的实现方法,适用于不同场景。

方法一:排序 + 双指针(适合有序或可修改原数组)

如果允许对数组排序,可以先对两个数组排序,然后使用双指针遍历,找出相同的元素。

示例代码:

#include #include using namespace std;vector getIntersection(vector& nums1, vector& nums2) {    sort(nums1.begin(), nums1.end());    sort(nums2.begin(), nums2.end());    vector result;    int i = 0, j = 0;    while (i < nums1.size() && j < nums2.size()) {        if (nums1[i] == nums2[j]) {            result.push_back(nums1[i]);            i++;            j++;        } else if (nums1[i] < nums2[j]) {            i++;        } else {            j++;        }    }    return result;}

说明:该方法时间复杂度为 O(m log m + n log n),空间复杂度较低。若要求去重,可在插入 result 前判断是否已存在。

方法二:哈希表(适合不允许排序或需保留原始顺序)

将一个数组的元素存入 unordered_set,再遍历另一个数组检查是否存在,能快速判断交集元素。

立即学习“C++免费学习笔记(深入)”;

示例代码:

#include #include using namespace std;vector getIntersection(vector& nums1, vector& nums2) {    unordered_set set1(nums1.begin(), nums1.end());    unordered_set resultSet;    for (int num : nums2) {        if (set1.count(num)) {            resultSet.insert(num); // 自动去重        }    }    return vector(resultSet.begin(), resultSet.end());}

说明:此方法时间复杂度为 O(m + n),适合大数据量。使用 resultSet 避免重复结果。

方法三:STL 算法 set_intersection(仅适用于有序数组)

C++ 标准库提供 set_intersection 函数,可用于求两个有序序列的交集。

示例代码:

#include #include #include using namespace std;vector getIntersection(vector& nums1, vector& nums2) {    sort(nums1.begin(), nums1.end());    sort(nums2.begin(), nums2.end());    vector result;    set_intersection(nums1.begin(), nums1.end(),                     nums2.begin(), nums2.end(),                     back_inserter(result));    return result;}

说明:简洁高效,但要求输入有序,且结果可能包含重复元素(若原数组有重复),如需去重可配合 unique 使用。

基本上就这些常用方法。根据是否允许修改原数组、是否需要去重、性能要求等选择合适方案。哈希表法最通用,双指针节省内存,STL 方法代码最简洁。不复杂但容易忽略细节,比如重复元素处理。

以上就是c++++中如何求两个数组的交集_c++数组交集实现方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1476922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 01:35:20
下一篇 2025年12月19日 01:35:30

相关推荐

发表回复

登录后才能评论
关注微信