Find Unique pair in an array with pairs of numbers 在具有数字对的数组中查找唯一对

本文介绍了一个简单的算法问题:在一个每个元素几乎都重复两次的数组中找出唯一一对仅出现一次的元素。通过创建辅助数组并利用计数技巧,该文提供了一个高效的解决方案。

给定一个数组,其中每个元素出现两次,除了一对(两个元素)。找到这个唯一对的元素。

输入:
第一行输入包含一个表示测试用例数的整数T。然后T测试用例如下。每个测试用例由两行组成。每个测试用例的第一行包含整数N表示数组的大小,第二行包含N个空格分隔元素。

输出:
对于每个测试用例, 在新行中以增加的顺序打印唯一对。

约束:
1 <= T <= 100 
1 <= N <= 10 3
1 <= A [i] <= 10 3

示例:
输入:


2 2 5 5 6 7 

1 3 4 1

输出:
6 7 
3 4

这个题算是最简单的一个题目,写下我的解题思路。

核心在于怎么找出来这一对元素:假设数组存放在b数组中,因为数组元素的大小是1-1000,所以新建数组a使其大小是1000,初始化为0。

依次将b中元素对应于a中的下标进行递增。如果最终a中是奇数的就是目标答案。只需要遍历一遍就可以了。

下面是具体代码实现:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n;//具体执行几次
    scanf("%d",&n);
    int *num=(int*)malloc(sizeof(int)*n);//num数组存放每个数组的大小.
    int i,j;//i是循环变量

    for(i=0;i<n;i++)
    {
        scanf("%d\n",&num[i]);//读入第i个数组元素的个数。
        int *b=(int*)malloc(sizeof(int)*num[i]);//分配b数组空间
        for(j=0;j<num[i];j++)
            scanf("%d",&b[j]);//依次读入数组元素.
        int a[1000]={0};//初始化为0
        for(j=0;j<num[i];j++)
            a[b[j]-1]++;//对数组a,b进行处理。

        for(j=0;j<1000;j++)
        {
            if(a[j]%2==1)
                printf("%d ",(j+1));
        }
        printf("\n");
    }
    return 0;
}

如果存在任何不理解,请留言。

转载于:https://www.cnblogs.com/wongyi/p/7671238.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值