給出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個數...