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

2021-10-05 14:12:15 字數 760 閱讀 4077

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

一看題目發現要求空間複雜度為o(1),一下子就徹底蒙了,本來打算用傳統的方法建立乙個大陣列,裡面有多少就加1,發現完全不行,想了半天沒有想出來結果,於是借鑑了一下答案,發現了位運算是真的厲害;

聯想到了以前那道用位運算解八皇后的題:

取乙個二進位制數的最低位1的值:

如0110;取倒數第二位1;

可以用lowbit 即 a&(-a);

異或的操作:

0與任何值異或都為他本身;

兩個相同的數異或為0;

於是這道題的**便如下·,這裡假設兩個不相等的元素為a,b

······思路為首先算出來整個陣列所有值的異或值,相同的兩個值異或為0,最後的結果便為兩個不同的值的異或結果;

···接著分組,將a與b分為不同的組,根據a^b的結果中任意取乙個1值,這裡取最低位,這裡a的此位與b的此位一定是相反的,同時陣列中的其他元素也可以根據這個來分組,若此位為1為一組,不為1的為一組,然後異或便得到了所需要的ab值;

**:

class

solution

int lowbit = cur&

(-cur)

;for

(int i =

0; i < nums.length; i ++

)else

}return out;

}}

面試題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 示例 1 輸入 nums 4,1,4,6 輸出 1,6 或 6,1 示例 2 輸入 nums 1,2,10,4,1,4,3,3 輸出 2,10 或 10,2...