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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

40个亿非负整数中找到未出现的数

發布時間:2025/4/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 40个亿非负整数中找到未出现的数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

32位無符號的范圍是0-42 9496 7295,現在有一個正好包含40億個無符號整數的文件,所以在整個范圍中必然有未出現的數。

初階:可以使用最多1GB的內存,怎么找到所有未出現過的數

進階:內存限制為10MB,但是只用到一個沒出現過的數即可

思路:

首先明確兩個公式:1B = 8bit? ? 32b = 4B

一個數占4B

40億個數大約16GB空間

簡單的辦法(初階) 就是申請一個42 9496 7295的bit array 數組,遍歷40億個數,如在某個數對應位置,則該數組相應位置標記為1,遍歷40億文件之后,再遍歷數組,發現哪個位置為0,表示該位置的數未出現過。

此辦法所需要空間:42 9496 7295b =?42 9496 7295/8 B 大約500M空間

還有一個辦法(進階)就是根據內存限制10MB=10 000 KB = 10 000 000 B = 80 000 000 b?

根據內存限制一下子只能處理大約80000個數,原始42 9496 7295 個數 / 80 000 000 大約等于50多個空間

所以反過來思考總結一下:

1、首先申請一個大于50多個空間的空間(假設申請64個)

2、 一共64個空間,共有42 9496 7295個數,每個空間大概67000000左右個數

遍歷42 9496 7295個數 如果數的范圍在那個空間,則該空間加1,此步驟所需內存為64*4B?

3、選擇區間位置沒有滿的空間,針對該空間遍歷42 9496 7295個數只選擇落在該空間的數,申請一個67000000左右的數組,如果那個數在對應位置,則該位置變為1,最終遍歷該空間找出為0的位置,對應的數即可找到,此步驟所需空間大小為67 000 000b 大約8M

?

?

總結

以上是生活随笔為你收集整理的40个亿非负整数中找到未出现的数的全部內容,希望文章能夠幫你解決所遇到的問題。

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