日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

出现了奇数次的数字的算法

發布時間:2025/3/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 出现了奇数次的数字的算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在一堆數字中,有兩個數字出現了奇數次,其余的數字出現了偶數次,設計一種算法找出這兩個數字。要求時間復雜度為O(n),空間復雜度為O(1)


假設這兩個數為a,b,將數組中所有元素異或結果x=a^b,判斷x中位為1的位數(注:因為a!=b,所以x!=0,我們只需知道某一個位為1的位數k,例如0010 1100,我們可取k=2或者3,或者5),然后將x與數組中第k位為1的數進行異或,異或結果就是a,b中一個,然后用x異或,就可以求出另外一個。

php代碼實現如下:

<?php class?xor_odd {public?function?__construct($arr,?&$one,?&$two){if(!is_array($arr)){return?FALSE;????}$res?=?0;$len?=?count($arr);for($i=0;?$i<$len;?$i++){??$res?=?$res^$arr[$i];??}??$temp?=?$res;??$k?=?0;??while(!($temp&1)){??$temp?=?$temp>>1;??$k++;??}??$temp?=?0;??for($i=0;?$i<$len;?$i++){??if(($arr[$i]>>$k)&1){??$temp?=?$temp^$arr[$i];??}??}??$one?=?$temp;??$two?=?$temp^$res;??} }?function?main() {??$arr?=?array(2,3,4,4,5,6,6,5);??new?xor_odd($arr,?$one,?$two);??echo?iconv('utf-8',?'gbk',?'出現了奇數次的兩個數字為:'.$one.'?和?'.$two);??return?0;?? }main();

算法的掃描過程如下圖所示:

轉載于:https://blog.51cto.com/hehe1987/1650971

總結

以上是生活随笔為你收集整理的出现了奇数次的数字的算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。