判讀40億數字中是否有某個數字

2022-04-11 20:36:54 字數 707 閱讀 1205

網上大部分是使用的bitmap演算法。大體思路是:乙個位元組(byte) 在計算機中佔8位(bit),每個位(bit)可以表示乙個數字,1表示含有,0表示不含有。1個32位系統的int型別可以儲存2的32次方個bit位,大約是42億多點。這樣40億需要 40/8=5億位元組,1m =1024kb*1024=1042576byte,故大概需要512m左右大小即可。空間複雜度是o(n)+o(1);

還有更好的方法:

這個問題在《程式設計珠璣》裡有很好的描述,大家可以參考下面的思路,**一下:

又因為2^32為40億多,所以給定乙個數可能在,也可能不在其中;

這裡我們把40億個數中的每乙個用32位的二進位制來表示

假設這40億個數開始放在乙個檔案中。

然後將這40億個數分成兩類:

1.最高位為0

2.最高位為1

並將這兩類分別寫入到兩個檔案中,其中乙個檔案中數的個數<=20億,而另乙個》=20億(這相當於折半了);

與要查詢的數的最高位比較並接著進入相應的檔案再查詢

再然後把這個檔案為又分成兩類:

1.次最高位為0

2.次最高位為1

並將這兩類分別寫入到兩個檔案中,其中乙個檔案中數的個數<=10億,而另乙個》=10億(這相當於折半了);

與要查詢的數的次最高位比較並接著進入相應的檔案再查詢。

.......

以此類推,就可以找到了,而且時間複雜度為o(logn)

Python中判斷輸入內容是否為某個數字

1 valueerror invalid literal for int with base 10 得到valueerror是因為int型不能將空字串轉換為整數,說明是我在轉換之前得到了乙個空的字串,或者說字串作為引數到int檢查之前它是空的或包含字母字元而不能對其進行轉換,所以在轉換的過程 現了錯...

判斷資料中是否有重複數字

題目要求 在長度為 n 的陣列中,存放的是0 n 1的數字,判斷該陣列中是否還有重複的數字。分析 比如陣列為 1,5,7,4,3,2,5,0 判斷下標值,與該位置的值是否相等,arr i 是否等於 i 遍歷陣列,第一位arr 0 1.則把arr 0 的值與arr 1 的值做調換。此時下標為1的位置對...

判斷有乙個數字是否為回文數

題目描述 判斷乙個整數是否是回文數。不能使用輔助空間。負整數可以是回文數嗎?例如 1 如果你打算把整數轉為字串,請注意不允許使用輔助空間的限制。你也可以考慮將數字顛倒。但是如果你已經解決了 顛倒整數 問題的話,就會注意到顛倒整數時可能會發生溢位。你怎麼來解決這個問題呢?本題有一種比較通用的解決方式。...