[LeetCode][總結] 只出現n次的數字(I-II-III...)總結

只出現n次的數字(I-II-III…)總結

LeetCode中「只出現n次的數字…」題有以下幾題:

  1. 260. 只出現一次的數字 III
  2. 137. 只出現一次的數字 II
  3. 136. 只出現一次的數字

題意分別是:

  1. 題136給定非空整數序列,只有一個元素(A)只出現一次,其他元素都出現兩次,找出出現一次的元素.
  2. 題137給定非空整數序列,只有兩個元素(A,B)只出現一次,其他元素都出現兩次,找出這兩個出現一次的元素.
  3. 題260給定非空整數序列,只有一個元素(A)只出現一次,其他元素都出現三次,找出出現一次的元素.

題解分別是:

  1. 題136,對整個序列進行異或,相同的元素都被抵消,異或結果即爲A;
  2. 題137,受題136解法啓發,關鍵點也是採用異或解題,對序列整體做一次異或,異或結果即爲A和B的異或,既然A和B不相同,那麼只有有一個bit位不同,那麼異或結果中任何一個爲1的位即可作爲區分標誌,以此爲標誌將序列分爲兩組,即可將題137分解爲兩個題136來解;
  3. 題260,前兩次的解法在此題中不再奏效,因爲三次異或的結果依然是數本身。換個思路,我們先討論32位整數res的第i位(右->左)情況,res(i)由序列每個元素的第i位決定,那麼我們可以將第i位取出來,相加,然後對3取餘,那麼運算結果即爲元素A對此位的貢獻.

總結:

題137涉及兩個對象,題136和題260涉及一個對象,但是我們做完題260後,應該能找到此類題位運算的通解,即直接對對應bit位進行加和運算,這樣出現2次,3次乃至4次…N次的問題都可解,即取餘(%)消除出現N次的數,剩下的結果即爲出現一次的數,然後找出一次的數,即可轉化和分解研究對象,解n個研究對象的題。

——————————————
參考資料:
https://www.cnblogs.com/grandyang/p/4263927.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章