2017-09-30 24 views
0

算法只需檢測是否至少有兩個相同的數字。檢測一組數字是否具有相同數字的最佳算法

在我的照片中是否是最好的方式或者是否有更有效的方法。

這是書中的一項任務,如果我做得對,我也不會。

算法

enter image description here

+0

你有什麼試過?請查看[我可以詢問什麼主題?]的項目3(https://stackoverflow.com/help/on-topic)。 – jszakmeister

+0

我假設這本書要求你編碼該算法,這是兩個嵌套循環。不是最有效但直接和可行的。 –

+0

可能的重複https://stackoverflow.com/questions/7055508/find-duplicates-in-an-array –

回答

2

如果數組進行排序:

for(int i=0; i<a.length-1; i++) 
    if(a[i]==a[i+1]) 
    return true; 
return false; 

如果陣列未排序,使用緩存:

boolean[] cache=new boolean[N]; 
Arrays.fill(cache,false); //set all values to false 

for(int i=0; i<a.length; i++) 
    if(cache[a[i]]) 
    return true; 
    else 
    cache[a[i]]=true; //mark element a[i] as seen 
return false; 

在上述,N是數組a中出現的最大值。如果N未知或非常大,或者您的數組包含負值,請使用映射而不是數組作爲緩存。

這兩種解決方案都運行在O(n)時間。第二個解決方案只需要一個外部緩存來記住我們以前見過的元素。

0

,你可以這樣做:

Loop on I 
     Loop on j 
      If value of a[I] = value of a[j] 
        Break; /*at least one double found*/ 

沒有?

錯誤..忘掉它..

相關問題