lsmCC 发表于 2023-10-15 17:31:01

数组去重

如果一个数组为中有四个元素,另外一个数组中有两个元素且与第一个数组的元素相同,怎么打印第一个数组不相同的两个数
用c++写

isdkz 发表于 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函数找出不在第一个数组中的元素。

陶远航 发表于 2023-10-15 17:31:32

在C++中,我们可以使用STL中的std::set或std::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_set的find方法的时间复杂度是O(1),所以这个算法的总时间复杂度是O(n),其中n是第一个数组的大小。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 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++;
    }
   
    // 处理数组B中的元素
    for (int num : B) {
      if (countMap.count(num) > 0) {
            countMap--;
      } 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。

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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

陈尚涵 发表于 2023-10-15 17:36:24

请不要重复发帖
我粘贴下上个帖子的内容


没看懂,第一个数组4个元素,第二个数组2个元素,且第一个数组完全覆盖第二个数组,打印第一个数组不同的数?那和第二个数组有什么关系,真没看明白
我就当你是一个数组,要去除所有重复的数字,可以另外定义一个布尔数组来表示有没有去掉,然后用桶或map来检测之前有没有这个数,有的话就删除,即改变布尔数组的值
还有一种慢方法,不用桶map了,用二维数组来进行判断
最后按布尔数组把没有删掉的给输出就好了
页: [1]
查看完整版本: 数组去重