題目思路乙個整型陣列 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...