鱼C论坛

 找回密码
 立即注册
查看: 1587|回复: 4

数组去重

[复制链接]
发表于 2023-10-15 17:31:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如果一个数组为中有四个元素,另外一个数组中有两个元素且与第一个数组的元素相同,怎么打印第一个数组不相同的两个数
用c++写
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-15 17:31:15 | 显示全部楼层
可以先将两个数组合并成一个数组,然后对这个数组进行去重,最后找出不在第一个数组中的两个数即可。

下面是示例代码:

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>

  4. using namespace std;

  5. int main() {
  6.     int arr1[] = {1, 2, 3, 4};
  7.     int arr2[] = {2, 4};
  8.     int len1 = sizeof(arr1) / sizeof(int);
  9.     int len2 = sizeof(arr2) / sizeof(int);
  10.     vector<int> vec(len1 + len2);
  11.     merge(arr1, arr1 + len1, arr2, arr2 + len2, vec.begin());
  12.     sort(vec.begin(), vec.end());
  13.     auto it = unique(vec.begin(), vec.end());
  14.     for (auto i = vec.begin(); i != it; ++i) {
  15.         if (find(arr1, arr1 + len1, *i) == arr1 + len1) {
  16.             cout << *i << " ";
  17.         }
  18.     }
  19.     cout << endl;
  20.     return 0;
  21. }
复制代码


输出结果为:

  1. 1 3
复制代码


这里使用了  merge  函数将两个数组合并成一个有序数组,然后使用  sort  和  unique  函数将数组去重。最后使用  find  函数找出不在第一个数组中的元素。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-15 17:31:32 | 显示全部楼层
在C++中,我们可以使用STL中的std::setstd::unordered_set来实现数组去重。这两个数据结构都能自动去除重复元素。下面是一个简单的示例:

  1. #include <iostream>
  2. #include <vector>
  3. #include <unordered_set>

  4. int main() {
  5.     // 初始化两个数组
  6.     std::vector<int> array1 = {1, 2, 3, 4};
  7.     std::vector<int> array2 = {1, 2};

  8.     // 使用unordered_set去重
  9.     std::unordered_set<int> set1(array1.begin(), array1.end());
  10.     std::unordered_set<int> set2(array2.begin(), array2.end());

  11.     // 打印第一个数组中不在第二个数组中的元素
  12.     for (int num : set1) {
  13.         if (set2.find(num) == set2.end()) {
  14.             std::cout << num << std::endl;
  15.         }
  16.     }

  17.     return 0;
  18. }
复制代码


在这个例子中,我们首先将两个数组转换为unordered_set,然后遍历第一个集合,对于每个元素,我们检查它是否在第二个集合中。如果不在,我们就打印它。

注意,unordered_setfind方法的时间复杂度是O(1),所以这个算法的总时间复杂度是O(n),其中n是第一个数组的大小。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-15 17:32:12 | 显示全部楼层
问题描述:
给定两个数组,一个数组A包含四个元素,另一个数组B包含两个与数组A中的元素相同的元素。要求打印出数组A中不相同的两个数。

解决方案:
你可以使用哈希表来解决这个问题。哈希表可以用来记录数组中元素的出现次数,从而实现去重和计数的功能。

具体步骤如下:
1. 创建一个哈希表,用于记录数组A中每个元素的出现次数。
2. 遍历数组A,统计每个元素出现的次数,并将其记录在哈希表中。
3. 遍历数组B,对于其中的每个元素,如果在哈希表中已经存在,则将其出现次数减1;如果在哈希表中不存在,则表示该元素是数组A中不相同的元素,将其打印出来。
4. 最后遍历哈希表,找到剩余出现次数为1的元素,并将其打印出来。

代码示例(C++):
  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <vector>
  4. void printUniqueNumbers(const std::vector<int>& A, const std::vector<int>& B) {
  5.     std::unordered_map<int, int> countMap;
  6.    
  7.     // 统计数组A中每个元素的出现次数
  8.     for (int num : A) {
  9.         countMap[num]++;
  10.     }
  11.    
  12.     // 处理数组B中的元素
  13.     for (int num : B) {
  14.         if (countMap.count(num) > 0) {
  15.             countMap[num]--;
  16.         } else {
  17.             std::cout << num << " ";
  18.         }
  19.     }
  20.    
  21.     // 打印数组A中剩余出现次数为1的元素
  22.     for (auto& entry : countMap) {
  23.         if (entry.second == 1) {
  24.             std::cout << entry.first << " ";
  25.         }
  26.     }
  27. }
  28. int main() {
  29.     std::vector<int> A = {1, 2, 3, 4};
  30.     std::vector<int> B = {3, 4};
  31.    
  32.     printUniqueNumbers(A, B);
  33.    
  34.     return 0;
  35. }
复制代码

运行上述代码,将会输出数组A中不相同的两个数,即1和2。

希望以上解决方案能够满足你的需求。如果有任何疑问,请随时让我知道。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-15 17:36:24 | 显示全部楼层
请不要重复发帖
我粘贴下上个帖子的内容


没看懂,第一个数组4个元素,第二个数组2个元素,且第一个数组完全覆盖第二个数组,打印第一个数组不同的数?那和第二个数组有什么关系,真没看明白
我就当你是一个数组,要去除所有重复的数字,可以另外定义一个布尔数组来表示有没有去掉,然后用桶或map来检测之前有没有这个数,有的话就删除,即改变布尔数组的值
还有一种慢方法,不用桶map了,用二维数组来进行判断
最后按布尔数组把没有删掉的给输出就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 05:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表