lintcode 84 落單的數 III

2022-03-29 17:57:58 字數 591 閱讀 6265

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

樣例給出 [1,2,2,3,4,4,5,3],返回 1和5

挑戰o(n)時間複雜度,o(1)的額外空間複雜度

標籤

思路

對於2*n+1個數字用異或就可以,參見部落格lintcode-82.落單的數,而在此題將所有數異或之後得到的是兩個落單的數的異或結果,沒辦法將結果拆分成兩個落單的數。但因為兩個落單數不同,所以肯定存在某個位k,使得兩落單數在第k位上乙個為0另乙個為1(怎麼找到這個k? 找異或結果中1出現的位置即可)。只需找到最小的這個k,然後將在k位上為0的所有數做異或得出其中乙個落單的數,在k位為1的所有數也做另外的異或,得出另乙個落單的數,這樣最終可以得到兩個落單的數。

code

class solution 

for(i=0; i> k ) % 2;

if(kbit == 0)

else

}res.push_back(r1);

res.push_back(r2);

return res;

}};

LintCode 82 落單的數

給出2 n 1 個的數字,除其中乙個數字之外其他每個數字均出現兩次,找到這個數字。樣例 給出 1,2,2,1,3,4,3 返回 4 異或運算 首先異或表示當兩個數的二進位制表示,進行異或運算時,當前位的兩個二進位制表示不同則為1相同則為0.該方法被廣泛推廣用來統計乙個數的1的位數!參與運算的兩個值,...

落單的數 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個數...