落單的數 III

2021-07-05 03:36:28 字數 460 閱讀 1718

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

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

class solution 

int r1 = 0, r2 = 0;

for ( int i = 0; i < n; ++i )

vectorres;

res.push_back(r1);

res.push_back(r2);

return res;

}};

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.落單的數,而在此題將所有數異或之後...

LintCode 82 落單的數

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

面試題1 落單的數

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