找出數組中唯一出現兩次的數


假設你有一個用1001個整數組成的數組,這些整數是任意排列的,但是你知道所有的整數都在1到1000(包括1000)之間。此外,除一個數字出現兩次外,其他所有數字只出現一次。假設你只能對這個數組做一次處理,用一種算法找出重復的那個數字。如果你在運算中使用了輔助的存儲方式,那么你能找到不用這種方式的算法嗎?

 

方法一:使用輔助存儲方式

使用hash存儲方式,以1到1000作為hash表的索引,遍歷原數組,統計各數字出現的個數並存儲到以該數字為索引值的hash表中,若某個hash[x]的值為2則退出循環,x就是重復出現兩次的數字。時間復雜度最壞是O(n)。優點:高效率,缺點:消耗的內存空間過大

 1 int fun1(const int a[])
 2 {
 3     int hash[1001]={0};
 4     int x=0;
 5     for(int i=0;i<1001;i++)
 6     {
 7         if((++hash[a[i]])==2)
 8         {
 9             x=a[i];
10             break;
11         }
12 
13     }
14     return x;
15 }

方法二:不使用輔助存儲方式

 1 int fun2(const int a[])
 2 {
 3   int s1=0;
 4   int s2=(1+1000)*1000/2;
 5   for(int i=0;i<1001;i++)
 6   {
 7      s1+=a[i];
 8   }
 9   return s1-s2;
10 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM