c 實現 陣列中只出現一次的數(兩個)

2021-10-07 21:26:25 字數 780 閱讀 1369

題目:

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

方法一:暴力法(借助雜湊實現)

很顯然的方法,遍歷一遍陣列,用map記錄出現的次數,然後再遍歷一遍陣列,找出出現1次的數字。

**

#include

class

solution

}*num1=res[0]

;*num2=res[1]

;}};

時間複雜度:o(n)

空間複雜度:o(n)

方法二:位運算(優化解,面試更需要)

異或運算:如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。

n^0 = n;

n^n = 0;

nnm = n(nm) 滿***換律

1.我們可以讓陣列中的每乙個數異或一下,最後會得到乙個結果ret,

2.就是兩個出現一次的數字的異或結果這個結果肯定是由兩個不同數字異或而來,因此我們找ret二進位制中為1的位置i,因為1一定是由0,1異或而來,因此要求得兩個數中,一定有乙個數的二進位制中的第i個位置為1, 乙個為0.

3.對和這個數相與為1的求異或是第乙個數,為0的是第二個數

**

class

solution

else}}

};

時間複雜度:o(n)

空間複雜度:o(1)

陣列中兩個只出現一次的數字

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。方法1 二話不說,直接雜湊 class solution for iif res data i 1 方法二 異或運算巧妙運用 可以用位運算實現,如果將所有所有數字相異或,則最後的結果肯定是那兩個只出...

陣列中只出現一次的兩個數

劍指 offer 56 i.陣列中數字出現的次數 大意 找出陣列中只出現一次的兩個數 其它出現兩次 思路 思路 首先需要知道乙個前置問題 找出陣列中只出現一次的乙個數 其它出現兩次 顯然,對整個陣列進行異或操作即可。那麼,我們是否有可能將本題中的陣列分隔成兩部分呢 不要求連續 答案是肯定的 我們仍然...

找出陣列中兩個只出現一次的數字

題目 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是 o n 空間複雜度是 o 1 解題思路 這個題目的突破口在 題目為什麼要強調有乙個數字出現一次,其他的出現兩次?我們想到了異或運算的性質 任何乙個數字異或它自己都等於 0。也就是說,如...