題目描述
已知某個文件內包含一些電話號碼,每個號碼為 8 位數字,統計不同號碼的個數。
解答思路
這道題本質還是求解數據重復的問題,對於這類問題,一般首先考慮位圖法。
對於本題,8 位電話號碼可以表示的號碼個數為 108 個,即 1 億個。我們每個號碼用一個 bit 來表示,則總共需要 1 億個 bit,內存占用約 100M。
思路如下:
申請一個位圖數組,長度為 1 億,初始化為 0。然后遍歷所有電話號碼,把號碼對應的位圖中的位置置為 1。遍歷完成后,如果 bit 為 1,則表示這個電話號碼在文件中存在,否則不存在。bit 值為 1 的數量即為 不同電話號碼的個數。
方法總結
求解數據重復問題,記得考慮位圖法。