乙個整型陣列 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,發現完全不行,想了半天沒有想出來結果,於是借鑑了...