假設陣列具有1至1,000,000的整數。在具有整數的數組中,一個值在數組中有兩次。你如何確定哪一個?
我知道解決這個問題的一些常用方法:
- 如果包括1到1,000,000之間的所有號碼,找到數組元素的總和,並從總金額中減去(N * N + 1/2)
- 使用哈希表(需要額外的內存)
- 使用位圖(更少的內存開銷)
我最近碰到另一種解決方案來了,我需要一些幫助,在瞭解背後邏輯它:
保持一個基數累加器。你異或 的索引和索引值都累加器。
x^C^x == C在這裏很有用,因爲每個數字將會是 的兩倍,除了那裏有兩次,這將出現3 次。 (x^x^x == x)和最終的索引,它會出現一次。 因此,如果我們用種子最終指數蓄電池,蓄電池的 終值將是在列表中的兩倍。
如果有人能幫助我理解這種方法背後的邏輯(用一個小例子!),我將不勝感激。
從分析的角度來看,基數累加器方法在空間或時間方面更有效率嗎?我理解空間需求是O(1),時間複雜度是O(n)。但是,我認爲數組方法的總和具有相同的複雜度。對 ? – brainydexter
沒有問題說整數是連續的,或者如果數組包含範圍內的所有數字。儘管對問題的簡要描述並未排除該數組,但基數解決方案似乎並不適用於{100,15,15,3,1000000}。 – Ross