【漫步刷题路】-找到数组中唯一成对出现的数字

简介: 第一步:先将数组全部数进行异或,结果记为:ret第二步:将ret和1- >n -1进行异或最后异或的结果就算重复的数

7a34fe554b7c48f0adc8a6f690934cc1.png

题目要求

1 -n 个数,数的范围是:1-> n-1,无序放在n+1个空间的数组中,数组中有一个数重复,找出重复的数


相似题目

之前博主也已经讲解过这类型的题目,也是通过异或解决,大家可以自行查看:

LeetCode-消失的数字

剑指offer-数组中数字出现的次数


1 3 2 4 2 放在5个空间的数组中 重复数字为2

方法

和找数组中只有一个数不重复基本一致 ->异或

  • 第一步:先将数组全部数进行异或,结果记为:ret
  • 第二步:将ret和1- >n -1进行异或
  • 最后异或的结果就算重复的数

如:

1 2 3 2 4  此时n = 5 共5个元素
数组所有元素异或:ret = 1^2^3^2^4
异或的结果ret和1-n的数进行异或,此时n=4  ret = 1^2^3^2^4^1^2^3^4 = 2
--重复的数字就是2

代码

int Repeat_num(int* arr,int n )
{
    int i = 0;
    int ret = 0;
    //ret和数组元素异或
    for(i = 0;i<n;i++)
    {
        ret ^= arr[i];
    }
    //ret和1 - n-1进行异或
    for(i =1 ;i<= n-1;i++)
    {
        ret^=i;
    }
    return ret;
}
int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,2};
    int ret = Repeat_num(arr,10);
    printf("%d\n",ret);
    return 0;
}
相关文章
【Leetcode -441.排列硬币 -448.找到所有数组中消失的数字】
【Leetcode -441.排列硬币 -448.找到所有数组中消失的数字】
51 0
|
8月前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
|
8月前
|
C++
【洛谷 P1059】[NOIP2006 普及组] 明明的随机数 题解(集合)
**NOIP2006普及组题目**,明明需生成不重复的1-1000间随机整数,输入含两行:第一行是整数N(≤100),第二行是N个随机数。输出两行,第一行是唯一数的个数M,第二行是排序后的唯一数。示例:输入10个数含重复,输出8个不同数排序后结果。解题方法:利用C++的`set`进行去重和排序。
81 0
|
9月前
|
算法 Java
刷题专栏(二十八):找到所有数组中消失的数字
刷题专栏(二十八):找到所有数组中消失的数字
130 4
|
9月前
|
人工智能 算法 Java
数组元素的目标和(蓝桥杯每日一题)
数组元素的目标和(蓝桥杯每日一题)
49 0
|
存储 算法 Serverless
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
81 0
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
消失的数字,旋转数组(leetcode 一题多解)
消失的数字,旋转数组(leetcode 一题多解)
|
算法
【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字
【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字
63 0
|
算法 Java
【算法题目解析】杨氏矩阵数字查找
一道面试时可能遇到的算法问题,杨氏矩阵。可以重点关注思考方式,而不是死记硬背。
49 0
|
算法 安全
代码随想录算法训练营第六天| 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
代码随想录算法训练营第六天| 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和