找出数组中唯一的重复元素
2013-03-15 15:20
253 查看
数组a ,1至N-1这N-1个数存放在a 中,其中某个数重复一次。找出这个数
void xor_findDup1(int *a,int N) {//方法一:求和 int tmp1 = 0; int tmp2 = 0; for(int i = 0;i < N - 1; ++i) {//tmp1为1...N-1的和,tmp2为数组所有元素的和 tmp1 += (i + 1); tmp2 += a[i]; } tmp2 += a[N-1]; printf("%d\n",tmp2 - tmp1); } void xor_findDup2(int *a,int N) {//方法二:异或法 int i; int result = 0; for(i = 0;i < N;++i) { result ^= a[i]; } for(i = 1;i < N;++i) { result ^= i; } printf("%d\n",result); } #define sum(x) ((x)((x)+1)/2)) void xor_findDup3(int *a,int N) {//方法三(a):位图法 int *arrayflag = (int*)malloc(N * sizeof(int)); int i = 1; while(i < N) { arrayflag[i] = false; ++i; } for(i = 0;i < N; ++i) { if( arrayflag[a[i]] == false) arrayflag[a[i]] = true; else { printf("%d\n",a[i]); return ; } } } int FindMoreInteger1(int *a,int N) {//方法三(b):hash int i; for(i = 0; i < N; ++i) { if( a[i] > 0) { if(a[a[i]] > 0) { a[a[i]] = -a[a[i]]; } else return -a[i]; } else { if(a[-a[i]] > 0) { a[-a[i]] = -a[-a[i]]; } else { return -a[i]; } } } } int FindMoreInteger2(int *a,int N) {//方法四:寻找环的入口点(重复元素) int x,y; x = y = 0; do { x = a[a[x]]; //x一次走两步 y = a[y]; //y一次走一步 }while(x != y); //相遇点 x = 0; do { x = a[x]; y = a[y]; }while(x != y); //寻找入口点 return x; }
相关文章推荐
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】
- 如何找出数组中唯一的重复元素
- leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组
- 在 1--N 的连续数组中找出唯一重复的元素
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 如何找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 在数组中找出唯一的重复元素
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 程序员面试题精选(36):找出数组中唯一的重复元素
- 找出数组中唯一的重复元素
- 找出数组中的唯一重复元素
- 面试题:在一个数组中有0-99之间的整数101个(数组无序),用高效方法找出其中的唯一的重复元素!
- 找出数组中唯一的重复元素
- 找出数组唯一重复的元素