在陣列中找出只出現一次的兩個數

2021-09-20 17:44:23 字數 1805 閱讀 7446

題目是這樣敘述的:

在乙個陣列中除兩個數字只出現1次外,其它數字都出現了2次, 要求盡快找出這兩個數字。

要求:時間複雜度為o(n),空間複雜度為o(1)。

請看我的分析:

將這道題簡單化:

乙個陣列中只有乙個數字出現一次,其他數字都是成對出現的,這時我們可以根據異或運算子的特性:a^b^a = b; 0 ^ a = a;我們可以將這個陣列的全部元素依次做異或運算,最終結果就是那個只出現一次的數字。

如果這個陣列**現兩個不同的數字,而其他數字均出現兩次,假設這兩個數字分別是x, y。那如果可以將x, y分離到兩個陣列。這時這道題就變成兩個我們簡化之後的版本中的陣列了。這樣問題就可以得到解決了。

由於x,y肯定是不相等的,因此在二進位製上必定至少有一位是不同的。根據這一位是0還是1可以將x,y分開到a組和b組。並且陣列中其他元素也可以根據這個方法劃分到兩個陣列中。這時將兩個陣列分別做異或運算,結果就是這兩個數字。

voidfindnums(inta,intn,int* num1,int* num2)//a一維陣列;n是陣列中的元素個數;

intj = 0;

for(j; j <sizeof(int)* 8; j++)

num1 = 0;

num2 = 0;

for(inti = 0; i

else

}

}

找出陣列中只出現一次的兩個數

題目 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 思路 首先交待一下異或的基本性質 2個相同的數異或等於0,且異或操作 滿足結合律和交換律。再來考慮一種簡單一點的情況 乙個陣列中只有乙個元素出現唯一的一次,而...

找出只出現一次的兩個數字

乙個整形陣列裡,除了兩個數字之外,其他的數字都出現了兩次,找出這兩個只出現一次的數字,例如陣列,找出7和9。之前做過乙個陣列中只有乙個只出現一次的數字,用亦或的方法,同理,找兩個數字,先把所有數字亦或,最後的結果是兩個只出現一次的數亦或的結果,這個結果中,出現1的位置說明兩個元素當前位不相等,可以根...

陣列中只出現一次的兩個數

劍指 offer 56 i.陣列中數字出現的次數 大意 找出陣列中只出現一次的兩個數 其它出現兩次 思路 思路 首先需要知道乙個前置問題 找出陣列中只出現一次的乙個數 其它出現兩次 顯然,對整個陣列進行異或操作即可。那麼,我們是否有可能將本題中的陣列分隔成兩部分呢 不要求連續 答案是肯定的 我們仍然...