從一萬個數中找到剛拿掉的數

現在有一萬(1-10000)的個數,從中拿掉一個數,還剩9999個數,現在用一個數組來存儲這9999個數,問怎麼才能找出拿掉的數?

1 用10000個數的數組循環匹配9999個數,匹配成功,從9999數組中去除,不成功就是該數。
2 從1加到10000,結果是50005000,對數組求和,結果是X,被拿掉的數就是50005000-X

假如拿掉的是兩個數,怎麼才能找出拿掉的數:求出10000個數的和A,求出10000個數的平方和B,
求出剩下的數的和a,求出剩下的數的平方和b,
假定去掉的兩數是x,y
那麼
x+y=A-a
x^2+y^2=B-b

解一個2元2次方程組就出來了。
複雜度還是O(n)



3 xor

首先複習一下異或運算(^)的性質:它滿足交換律、結合律。

設 最初的數組是 A,
拿掉 x 之後的數組是 B,
xor() 是對數組內所有元素做異或,則有:

xor(A) == xor(B) ^ x

xor(B) ^ xor(A) == xor(B) ^ xor(B) ^ x == 0 ^ x == x
發佈了39 篇原創文章 · 獲贊 0 · 訪問量 1309
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章