40億不重複的正整數,如何判斷乙個數是否在其中

2021-09-01 03:16:26 字數 331 閱讀 4373

int型的表示範圍為 -2^32~2^32-1 ,也就是40億多點。

如果只是找乙個數在不在其中,則可以直接遍歷一次,這是最快速的方法。

如果要是判斷多個數是否在其中,則遍歷多次效率就很低了,首先4*10^9 bit 約等於512m位元組,因此首先可以在記憶體中開512m的空間,建立乙個陣列a,遍歷一次40億個數,將陣列下標為這個數的位置1,如遍歷到2000000111這個數,則直接將a[2000000111]置1。 在查詢某個數在不在其中,直接取陣列的那個位置資料判斷如果是1則表示在,0表示不在。

這個方法叫做位圖法 bitmap, 在判斷多個數在不在其中的時候效率很高。

參考:csdn

再談大於指定正整數的最小「不重複數」問題

對於 大於指定正整數的最小 不重複數 問題 最初,在 演算法 求比指定數大且最小的 不重複數 問題的高效實現 中,我給出了乙個遞迴寫法,之後在同一篇博文中給出了乙個非遞迴寫法。中對我的寫法進行了更詳細的說明,並進行了重要改進。使之適合範圍更大。在 評playerc的 求比指定數大且最小的 不重複數 ...

再談大於指定正整數的最小「不重複數」問題

對於 大於指定正整數的最小 不重複數 問題 最初,在 演算法 求比指定數大且最小的 不重複數 問題的高效實現 中,我給出了乙個遞迴寫法,之後在同一篇博文中給出了乙個非遞迴寫法。中對我的寫法進行了更詳細的說明,並進行了重要改進。使之適合範圍更大。在 評playerc的 求比指定數大且最小的 不重複數 ...

如何判斷乙個數是否在40億個整數中?

題目 我有40億個整數,再給乙個新的整數,我需要判斷新的整數是否在40億個整數中,你會怎麼做?請教大神 小史回到學校,把面試的情況和計算機學院的呂老師說了一下。小史忙拉著呂老師問,為什麼我說分8次載入資料,面試官會說太慢了呢?呂老師 哈哈,從磁碟載入資料是磁碟io操作,是非常慢的,你每次都要載入這麼...