乙個陣列,有兩個數字只出現一次,其他數字出現兩次,如何在o(n)的複雜度,o(1)的空間複雜度情況下求出這兩個數字?
這個題之前做校賽的時候做過,還是很簡單,由異或的性質,我們很容易得知道,把所有數字都異或一次,答案就是res=a^b(那倆單獨的數字的異或),那麼怎麼利用好這個res呢?由於本題不能開陣列,無法從資料結構或者某個演算法的角度去考慮,那麼肯定是用位運算那麼考慮把這個res的二進位制位展開,任意選擇res的某乙個二進位制為1的位置,那麼a和b的區別就在a和b的二進位制位在這一位上不相同,那麼擴充套件到整個陣列,我們考慮整個陣列的數都可以分成這個數在這個位置上為0和為1的兩類,這兩類把各自的異或和求出來,就是單獨的兩個數
class
solution
int bit=0;
for(
int j=
0;j<
32;j++)}
int a=0;
for(
int i=
0;ivector<
int>ans;
ans.
push_back
(a);
ans.
push_back
(res^a)
;return ans;}}
;
面試題56 I 陣列中數字出現的次數
面試題56 i.陣列中數字出現的次數 難度中等92收藏分享切換為英文關注反饋 乙個整型陣列nums裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 示例 1 輸入 nums 4,1,4,6 輸出 1,6 或 6,1 示例 2 輸入...
面試題56 I 陣列中數字出現的次數
乙個整型陣列 nums 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 一看題目發現要求空間複雜度為o 1 一下子就徹底蒙了,本來打算用傳統的方法建立乙個大陣列,裡面有多少就加1,發現完全不行,想了半天沒有想出來結果,於是借鑑了...
面試題56 I 陣列中數字出現的次數
乙個整型陣列 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...