劍指 面試題56 1 陣列中數字出現的次數

2021-10-05 00:06:31 字數 1072 閱讀 3539

題目

乙個整型陣列 nums 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o(n),空間複雜度是o(1)。

2

<=n

um

s<

=10000

2 <= nums <= 10000

2<=n

ums<=1

0000

思路

任何乙個數字異或它自己都是0, 0異或任何數還是原數字。

所以如果陣列**現一次的數字只有乙個,那麼從頭到尾依次異或陣列中的每個數字,最後得到的數字就是只出現一次的數字。

如果陣列**現兩個出現1次的數字,那麼依次異或之後就是這兩個不同數字的異或結果,且肯定不為0,至少有一位是1。可以按照這一位是否為1把原陣列分為兩個子陣列,這兩個目標值分別在兩邊,而子陣列的其他值都出現了兩次。

c++

class

solution

return res;}}

;

python

class

solution

:def

singlenumbers

(self, nums: list[

int])-

> list[

int]

: s =

0for each in nums:

s = s ^ each

res =[0

]*2 k = s &

(-s)

for each in nums:

if each & k:

res[0]

^= each

else

: res[1]

^= each

return res

劍指offer 面試題56 陣列中數字出現的次數

問題1 陣列中只出現一次的兩個數字 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。2 nums 10000 思路 異或 首先,對陣列的每個數字依次進行異或,得到異或後的結果value。然後,記value最右邊第一位為1的位為i,依據第i位為1 0將陣列分...

劍指offer 面試題56 陣列中數字出現的次數

乙個整型陣列nums裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 輸入 nums 4,1,4,6 輸出 1,6 或 6,1 輸入 nums 1,2,10,4,1,4,3,3 輸出 2,10 或 10,2 字典 時間複雜度是o ...

劍指 面試題56 2 陣列中數字出現的次數2

題目 在乙個陣列 nums 中除乙個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。1 n ums.leng th 10000,1 n ums i 231 1 nums.length 10000,1 nums i 2 1 n ums.leng th 1 0000 1 n ums...