出现了奇数次的数字的算法
生活随笔
收集整理的這篇文章主要介紹了
出现了奇数次的数字的算法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在一堆數(shù)字中,有兩個數(shù)字出現(xiàn)了奇數(shù)次,其余的數(shù)字出現(xiàn)了偶數(shù)次,設(shè)計一種算法找出這兩個數(shù)字。要求時間復(fù)雜度為O(n),空間復(fù)雜度為O(1)
假設(shè)這兩個數(shù)為a,b,將數(shù)組中所有元素異或結(jié)果x=a^b,判斷x中位為1的位數(shù)(注:因為a!=b,所以x!=0,我們只需知道某一個位為1的位數(shù)k,例如0010 1100,我們可取k=2或者3,或者5),然后將x與數(shù)組中第k位為1的數(shù)進行異或,異或結(jié)果就是a,b中一個,然后用x異或,就可以求出另外一個。
php代碼實現(xiàn)如下:
算法的掃描過程如下圖所示:
轉(zhuǎn)載于:https://blog.51cto.com/hehe1987/1650971
總結(jié)
以上是生活随笔為你收集整理的出现了奇数次的数字的算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell脚本之函数篇
- 下一篇: AutoLayout屏幕适配