鱼C论坛

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

数组去重

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

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

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

x
如果一个数组为中有四个元素,另外一个数组中有两个元素且与第一个数组的元素相同,怎么打印第一个数组不相同的两个数
用c++写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

下面是示例代码:
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    int arr1[] = {1, 2, 3, 4};
    int arr2[] = {2, 4};
    int len1 = sizeof(arr1) / sizeof(int);
    int len2 = sizeof(arr2) / sizeof(int);
    vector<int> vec(len1 + len2);
    merge(arr1, arr1 + len1, arr2, arr2 + len2, vec.begin());
    sort(vec.begin(), vec.end());
    auto it = unique(vec.begin(), vec.end());
    for (auto i = vec.begin(); i != it; ++i) {
        if (find(arr1, arr1 + len1, *i) == arr1 + len1) {
            cout << *i << " ";
        }
    }
    cout << endl;
    return 0;
}

输出结果为:
1 3

这里使用了  merge  函数将两个数组合并成一个有序数组,然后使用  sort  和  unique  函数将数组去重。最后使用  find  函数找出不在第一个数组中的元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

    return 0;
}

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

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

使用道具 举报

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

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

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

代码示例(C++):
#include <iostream>#include <unordered_map>#include <vector>void printUniqueNumbers(const std::vector<int>& A, const std::vector<int>& B) {    std::unordered_map<int, int> countMap;        // 统计数组A中每个元素的出现次数    for (int num : A) {        countMap[num]++;    }        // 处理数组B中的元素    for (int num : B) {        if (countMap.count(num) > 0) {            countMap[num]--;        } else {            std::cout << num << " ";        }    }        // 打印数组A中剩余出现次数为1的元素    for (auto& entry : countMap) {        if (entry.second == 1) {            std::cout << entry.first << " ";        }    }}int main() {    std::vector<int> A = {1, 2, 3, 4};    std::vector<int> B = {3, 4};        printUniqueNumbers(A, B);        return 0;}
运行上述代码,将会输出数组A中不相同的两个数,即1和2。

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 22:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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