LintCode 82 落單的數

2021-08-07 03:59:41 字數 632 閱讀 3952

給出2*n + 1 個的數字,除其中乙個數字之外其他每個數字均出現兩次,找到這個數字。 樣例

給出[1,2,2,1,3,4,3]

,返回 4

異或運算:

首先異或表示當兩個數的二進位制表示,進行異或運算時,當前位的兩個二進位制表示不同則為1相同則為0.該方法被廣泛推廣用來統計乙個數的1的位數!

參與運算的兩個值,如果兩個相應bit位相同,則結果為0,否則為1。

即:0^0 = 0, 

1^0 = 1, 

0^1 = 1, 

1^1 = 0

按位異或的3個特點:

(1) 0^0=0,0^1=1  0異或任何數=任何數

(2) 1^0=1,1^1=0  1異或任何數-任何數取反

(3) 任何數異或自己=把自己置0

思路:通過異或,相同的數結果為0,那麼最後的結果一定是落單的數字。

class solution {

public:

/** @param a: an integer array

* @return: an integer

*/int singlenumber(vectora) {

int ans = 0;

for(int i=0; i

lintcode 84 落單的數 III

給出2 n 2個的數字,除其中兩個數字之外其他每個數字均出現兩次,找到這兩個數字。樣例給出 1,2,2,3,4,4,5,3 返回 1和5 挑戰o n 時間複雜度,o 1 的額外空間複雜度 標籤思路 對於2 n 1個數字用異或就可以,參見部落格lintcode 82.落單的數,而在此題將所有數異或之後...

落單的數 III

給出2 n 2個的數字,除其中兩個數字之外其他每個數字均出現兩次,找到這兩個數字。對於2 n 1個數字用異或就行了,而在此題將所有數異或之後得到的是兩個落單的數的異或結果,沒辦法將結果拆分成兩個落單的數。但因為兩個落單數不同,所以肯定存在某個位k,使得兩落單數在第k位上乙個為0另乙個為1,怎麼找到這...

面試題1 落單的數

有2n 1個數,其中2n個數兩兩成對,1個數落單,找出這個數。要求o n 的時間複雜度,o 1 的空間複雜度。高階問題 如果有2n 2個數,其中有2個數落單,該怎麼辦?答 初階 將2n 1個數異或起來,相同的數會抵消,異或的答案就是要找的數。高階 假設兩個不同的數是a和b,並且a b,將2n 2個數...