21xrx.com
2024-12-22 21:57:53 Sunday
登录
文章检索 我的文章 写文章
C++ 数组交集算法
2023-07-05 09:30:53 深夜i     --     --
C++ 数组 交集算法

C++ 数组交集算法是一种常见的算法,在许多编程场景中都有广泛的应用。数组交集算法可以用来计算两个数组中共同出现的元素。

在 C++ 中,可以使用两种不同的算法来计算数组交集:暴力枚举算法和哈希表算法。

暴力枚举算法的思路非常简单,就是依次遍历两个数组中的所有元素,通过比较值的方式来找到共同的元素。这种算法的时间复杂度为 O(n^2),其中 n 是数组的长度,因此在处理大规模数据时,算法的效率非常低。

另一种算法是哈希表算法。这种算法的思路是将一个数组中的所有元素存储到哈希表中,然后遍历另一个数组,并在哈希表中查找每个元素是否存在。由于哈希表是一种高效的数据结构,可以以 O(1) 的时间复杂度查找每个元素,因此哈希表算法的时间复杂度为 O(n)。

具体实现时,可以使用 C++ 标准库中的 unordered_set 类来实现哈希表。unordered_set 类可以存储任意类型的元素,并提供了高效的查找操作。

以下是一个使用哈希表算法计算数组交集的示例代码:


#include <iostream>

#include <vector>

#include <unordered_set>

using namespace std;

vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {

  unordered_set<int> s(nums1.begin(), nums1.end());

  vector<int> res;

  for (int num : nums2) {

    if (s.erase(num)) {

      res.push_back(num);

    }

  }

  return res;

}

int main() {

  vector<int> nums1 = 1;

  vector<int> nums2 = 2;

  vector<int> res = intersection(nums1, nums2);

  for (int num : res)

    cout << num << " ";

  

  cout << endl;

  return 0;

}

在这个示例代码中,我们首先使用 unordered_set 类构建了一个哈希表 s,将 nums1 中的所有元素存储到哈希表中。然后遍历 nums2 数组中的每个元素,通过查找哈希表的方式判断当前元素是否在 nums1 中出现过。如果存在,则将当前元素添加到结果数组 res 中。

最后,我们输出结果数组中的所有元素,即可得到 nums1 和 nums2 的交集。

总之,使用 C++ 数组交集算法可以很轻松地计算出两个数组的共同元素,并在实际编程中得到广泛的应用。无论你是面试准备还是工作中开发,都可以考虑掌握这个算法来提高自己的编程能力。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复