寻找数组中的不同值

 1     /*有一个数组,假如有一百万个数据,其中有一个的值与其他的不同。 
 2     如何在最短时间内将这个数据找出来 
 3     要求:不要开辟新的使用空间,如使用哈希表 
 4     不要使用判断语句,如if 
 5     */  
 6       
 7     #include "stdafx.h"  
 8       
 9     //不能一次异或3个,因为比较的结果为0的时候,我们不知道是diff num等于0还是3个数都相同造成的。  
10     int findDiffNum2(const int a[],int n)  
11     {  
12         assert(n>2); //大于2  
13         int i=1;  
14         int x = 1;  
15         while(i < n && 0==(a[i-1]^a[i]))  
16         {  
17             ++i; //如果n是偶数可以每次+2  
18             x = -2;  
19         }  
20         assert(i<n);  
21         //如果是开始的两个数不相等,则需要[i-1][i][i+1]异或,否则[i-2][i-1][i]  
22         return a[i-1]^a[i]^a[i+x];  
23     }  
24       
25     void testFindDiffNum()  
26     {  
27         int t[6]={11,12,12,12,12,12};  
28         int t2[6]={7,7,0,7,7,7};  
29         assert(findDiffNum2(t,6) == 11);  
30         assert(findDiffNum2(t2,6) == 0);  
31       
32         int t3[5]={7,7,7,7,3};  
33         assert(findDiffNum2(t3,5) == 3);  
34     } 
posted @ 2013-06-11 16:32  _pop  阅读(777)  评论(1)    收藏  举报