7-15 找出不是两个数组共有的元素

题目详情 - 7-15 找出不是两个数组共有的元素 (pintia.cn)

7-15 找出不是两个数组共有的元素
分数 20
作者 张彤彧
单位 浙江大学
给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
输出样例:
3 5 -15 6 4 1

两个集合交集的补集

两种写法:

c++ unordered_set st1;

无序set

//保存数组 防止 多个相同1中有 2中没有情况 :(1:3 3 2:8 8 ) 防止3 8多次输出情况

but 输出题过不去。。。。对不了一起

//两个数组去重
//输出不相同的元素 一次
//防止多个不相同 set   st1: 3   3  st2:8 8  输出一次3即可
//


#include<bits/stdc++.h>

using namespace std;

unordered_set<int> st1,st2;
vector<int> c;//保存1/2中有 2/1没有
int main()
{
    int n,m;
    cin>>n;
    for(int i = 0;i<n;i++)
    {
        int x;
        cin>>x;
        st1.insert(x);
    }
    cin>>m;
    for(int i = 0;i<m;i++)
    {
        int x;
        cin>>x;
        st2.insert(x);
    }
    for(auto &v:st1)
    {
        auto pos = st2.find(v);
        if(pos == st2.end()) c.push_back(v);
    }
    for(auto &v:st2)
    {
        auto pos = st1.find(v);
        if(pos == st1.end()) c.push_back(v);
    }
    bool fir = true;
    for(auto v:c)
    {
        if(fir)
        {
            fir = 0;
            printf("%d",v);
        }else{
            printf(" %d",v);
        }
    }
    return 0;
}
arr写法
暴力

将1中有2中没有的 放入数组c
将2中有1中没有的 放入数组c
可能出现 3 3 都放入c中 (1中有多个3   2中没有 那么 3们都放入c)
双指针 前面有 后面不必输出 即可
#include<bits/stdc++.h>

using namespace std;

int a[21],b[21],c[21];
int n,m;
int k = 0;//保存不同
int main()
{
    cin>>n;
    for(int i =0;i<n;i++)
    {
        cin>>a[i];
    }
    cin>>m;
    for(int i = 0;i<m;i++)
    {
        cin>>b[i];
    }
    int i,j;
    for( i = 0;i<n;i++)
    {
        for( j = 0;j<m;j++)
        {
            if(a[i] == b[j])
            {
                break;
            }
        }
        if(j == m)//不存在相等情况
        {
            c[k++] = a[i];
        }
    }
    for(i = 0;i<m;i++)
    {
        for(j = 0;j<n;j++)
        {
            if(b[i] == a[j])
            {
                break;
            }
        }
        if(j == n)
        {
            c[k++] = b[i];
        }
    }
    printf("%d",c[0]);
    for(i = 1;i<k;i++)
    {
        for(j = 0;j<i;j++)
        {
            if(c[i] == c[j])
            {
                break;
            }
        }
        if(j == i)//如果前面没有i
        {
            printf(" %d",c[i]);//   
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用集合操作来实现。先将两个数组转换为集合,然后使用差集运算(A - B)获取第一个数组中不存在于第二个数组中的元素,再使用差集运算(B - A)获取第二个数组中不存在于第一个数组中的元素。最后将这两个结果集合合并即可。 Python 代码如下: ```python a = [1,2,3,4] b = [3,4,5,6] c = set(a) - set(b) | set(b) - set(a) print(c) ``` 运行结果: ``` {1, 2, 5, 6} ``` ### 回答2: 题目描述 有两个数组arr1和arr2,请编写一个函找出不是两个数组共有元素,并以新数组的形式返回。 示例 输入:[4,3,2,1], [7,8,9,4] 输出:[3,2,1,7,8,9] 解析:在arr1中除了4以外的元素为[3,2,1],在arr2中除了4以外的元素为[7,8,9],将它们合并起来即为[3,2,1,7,8,9] 思路分析 可以先将两个数组合并为一个新的数组,然后找到不是两个数组共有元素。 方法一:使用set(集合)去重 将两个数组合并为一个新的数组arr,然后使用set去重得到一个新的数组setArr。为了统计元素出现的次,可以从arr中遍历元素,使用dictionary(字典)记录每个元素出现的次。最后遍历setArr数组,将字典中出现次为1的元素添加到结果数组中。 方法二:使用双指针 将两个数组排序,然后使用两个指针分别指向两个数组中的元素。如果两个指针所指的元素不相等,则将较小的元素添加到结果数组中,并将指向该元素的指针向后移动一位。如果两个指针所指的元素相等,则将两个指针同时向后移动一位。最终得到的结果数组即为不是两个数组共有元素。 代码演示 方法一:使用set(集合)去重的代码实现如下: ### 回答3: 练习7-4 要求我们找出两个数组中不共有元素。问题实际上可以转化为求两个数组的差集。也就是说,我们需要找到那些只出现在一个数组中的元素。 要完成这个任务,我们可以使用循环和条件语句来依次遍历两个数组中的元素,判断它们是否在另一个数组中出现过。如果在,就跳过该元素;如果不在,就将该元素加入到结果列表中。 具体的做法可以是这样的: 1. 定义两个数组,以及一个空的结果列表。 2. 遍历第一个数组中的所有元素: a. 对于当前的元素,检查它是否在第二个数组中出现过。 b. 如果没有出现过,就将它加入到结果列表中。 c. 如果出现过,就跳过该元素。 3. 重复步骤2,但这次遍历的是第二个数组中的所有元素。 4. 返回结果列表。 下面是一个示例代码,它实现了上述的算法: ``` def diffArrays(arr1, arr2): # 定义结果列表 result = [] # 遍历第一个数组中的元素 for elem in arr1: # 如果该元素在第二个数组中没有出现过 if elem not in arr2: # 将它加入到结果列表中 result.append(elem) # 遍历第二个数组中的元素 for elem in arr2: # 如果该元素在第一个数组中没有出现过 if elem not in arr1: # 将它加入到结果列表中 result.append(elem) # 返回结果列表 return result ``` 这个函接受两个数组作为参,返回它们的差集。我们可以将它应用到题目中给出的示例,例如: ``` arr1 = [1, 2, 3, 4, 5] arr2 = [3, 4, 5, 6, 7] result = diffArrays(arr1, arr2) print(result) # 输出: [1, 2, 6, 7] ``` 以上就是我对于练习7-4的解答。通过这个练习,我们不仅复习了Python中的循环和条件语句,还学习了如何求两个数组的差集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值