【算法】寻找数组中出现的唯一重复的一个数
来源:互联网 发布:sai for mac 中文版 编辑:程序博客网 时间:2024/05/16 09:03
题目要求:
假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。
此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。
此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。
解题思路:
数组中的1001个数相互异或的结果与(1-1000)相互异或的结果再做异或,得出的值即位所求
原理:
假设重复数为A,其余999个数相互异或结果为B。
那么1-1000异或结果为A^B;
1001个数异或结果为A^(A^B) 。
由于异或满足交换律和结合律,且X^X = 0, 0^X = X;
则有:A^(A^B) = B ;(A^B)^B=A。
A即为所求。
代码实现:
public static void find(int[] arr, int n){int result = 0;for(int i=0 ; i<n+1; i++){result ^= arr[i]; //数组内的数相互异或}for(int i=1 ; i<=n ; i++){result ^= i; //将上面的结果与1~n的数相互异或}System.out.println("找到重复的数为:"+result);}public static void main(String[] args){int[] arr = new int[10001];for(int i=1;i<=1000;i++){arr[i] = i;}int r = new Random().nextInt(1000);System.out.println("放入1000以内的一个随机数:"+r);arr[0] = r;find(arr,1000);}将代码简化为:
public static void find(int[] arr, int n){int result = 0;for(int i=0 ; i<n+1; i++){result ^= arr[i];result ^= i;}System.out.println("找到重复的数为:"+result);}
输出结果:
第1次试验放入1000以内的一个随机数:7找到重复的数为:7第2次试验放入1000以内的一个随机数:604找到重复的数为:604第3次试验放入1000以内的一个随机数:667找到重复的数为:667第4次试验放入1000以内的一个随机数:558找到重复的数为:558第5次试验放入1000以内的一个随机数:185找到重复的数为:185第6次试验放入1000以内的一个随机数:933找到重复的数为:933第7次试验放入1000以内的一个随机数:754找到重复的数为:754第8次试验放入1000以内的一个随机数:71找到重复的数为:71第9次试验放入1000以内的一个随机数:390找到重复的数为:390第10次试验放入1000以内的一个随机数:634找到重复的数为:634
- 【算法】寻找数组中出现的唯一重复的一个数
- 微软面试题 寻找数组中出现的唯一重复的一个数
- 微软面试题 寻找数组中出现的唯一重复的一个数
- 寻找数组中唯一出现两次的数
- 寻找数组中唯一的数
- 找出数组中唯一重复的数
- 数组中寻找重复的数
- 找出一个数组中没重复出现过的数
- 算法题1 数组中唯一出现1次的数|唯一出现2次的数
- 找出数组{1,2,3,4,...N-1}中出现的唯一重复数
- 寻找唯一出现奇数次的数
- 编程之美 N个正整数的数组 寻找丢失的数 和 寻找唯一重复的数
- 数组-在一个有序的数组中寻找出现次数超过一半的那个数
- 数组中唯一出现1次的数|唯一出现2次的数
- 寻找一个数组中出现次数为奇数次的一个数
- 位图法寻找数组中重复出现的数字
- 寻找数组中丢失的、者重复的、或者出现一次的的数的问题汇总
- 找出一个数组中唯一没有成对出现的两个数
- pre的换行
- make 输出 log 文件
- UNIX环境高级编程--第八章进程控制总结
- 关于ioremap,request_mem_region
- 项目管理、设计开发、代码管理、bug管理工具介绍
- 【算法】寻找数组中出现的唯一重复的一个数
- 矩阵与线性变换
- 深入iBatis的Cache
- java的多态的理解
- PhoneFactory.getDefaultPhone()引发的问题解决
- 文件上传
- hdu 2612 Find a way(广搜)
- 孔子学琴
- struts2 和 spring整合时的 Action class ... not found 异常