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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

寻找丢失的数字(二)

發布時間:2024/4/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 寻找丢失的数字(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果你還沒有看過上一篇文章,請先移步看問題描述。

擴展問題二:至多掃描一遍序列,求出丟失的兩個數字。??

不管用什么方法,可以肯定的是我們至少需要掃描一遍序列。

因為只能掃描一遍,所以先求出 a XOR b,再根據結果分類的方法就不適用了。

既然我們不能根據某一位分類,那我們能否對所有位進行分類呢?比如,int是32位,我們可以對每一位都分成兩類分別異或。

我們還要記錄每一位上1出現的次數,實際上,只需要記錄1出現奇數次還是偶數次就夠了。?

如果某一位上1出現奇數次,那么我們就知道 a 和 b 在此位上的比特不同。從而利用前面分類異或的結果就直接得出答案。

Python 代碼:

def?find_missing_2_numbers_v2(sequence,?n):
????"""?returns?the?missing?two?numbers?of?sequence,?which?is?supposed
????to?be?a?permutation?of?{1,..,n}?with?two?numbers?missing.
? ? An one-pass algorithm.
????
"""
????xors?=?[[0?for?i?in?xrange(2)]?for?j?in?xrange(32)]
????counts?=?[0?for?i?in?xrange(32)]
????for?i?in?xrange(1,?n?+?1):
????????for?k?in?xrange(32):
????????????t?=?1?&?(i?>>?k)
????????????xors[k][t]?^=?i
????????????counts[k]?^=?t
????for?e?in?sequence:
????????for?k?in?xrange(32):
????????????t?=?1?&?(e?>>?k)
????????????xors[k][t]?^=?e
????????????counts[k]?^=?t
????a,?b?=?0,?0
????for?k?in?xrange(32):
????????if?counts[k]:
????????????a,?b?=?xors[k][0],?xors[k][1]
????????????break

? ??return?a,?b?

?

擴展問題三:如果有三個數字丟失了呢?

其實上面的方法稍加修改就可以解決此問,具體實現留給讀者。有道類似題目http://yzfy.org/dis/listpost.php?tid=1009?可以用來測試你的算法~

轉載于:https://www.cnblogs.com/shilcare/archive/2012/04/24/2468336.html

總結

以上是生活随笔為你收集整理的寻找丢失的数字(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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