面試題56 I 陣列中數字出現的次數

2021-10-05 17:59:44 字數 899 閱讀 1086

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

示例 1:

輸入:nums = [4,1,4,6]

輸出:[1,6] 或 [6,1]

示例 2:

輸入:nums = [1,2,10,4,1,4,3,3]

輸出:[2,10] 或 [10,2]

限制:

2 <= nums <= 10000

一種方法是使用 set 儲存已經存在的數,如果再次出現就把它從 set 刪除,留下只出現一次的數。

更好的方法是使用異或的思想。如果乙個數字出現了兩次,那麼異或以後就是 0,最後剩下只出現一次的數的異或。

方法一:

class

solution

else

}int

result =

newint[2

];int i =0;

for(

int n : numset)

}return result;

}}

方法二:

class

solution

int d =1;

// 找出只出現一次的兩個數 a、b 的不相同的最低位。

while

((d & xor)==0

)int a =0;

int b =0;

// 根據找到的最低位分組

for(

int n : nums)

else

}return

newint

;}}

面試題56 I 陣列中數字出現的次數

面試題56 i.陣列中數字出現的次數 難度中等92收藏分享切換為英文關注反饋 乙個整型陣列nums裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 示例 1 輸入 nums 4,1,4,6 輸出 1,6 或 6,1 示例 2 輸入...

面試題56 I 陣列中數字出現的次數

乙個陣列,有兩個數字只出現一次,其他數字出現兩次,如何在o n 的複雜度,o 1 的空間複雜度情況下求出這兩個數字?這個題之前做校賽的時候做過,還是很簡單,由異或的性質,我們很容易得知道,把所有數字都異或一次,答案就是res a b 那倆單獨的數字的異或 那麼怎麼利用好這個res呢?由於本題不能開陣...

面試題56 I 陣列中數字出現的次數

乙個整型陣列 nums 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 一看題目發現要求空間複雜度為o 1 一下子就徹底蒙了,本來打算用傳統的方法建立乙個大陣列,裡面有多少就加1,發現完全不行,想了半天沒有想出來結果,於是借鑑了...