劍指 Offer 03. 數(shù)組中重復(fù)的數(shù)字

讀題

查重問題。(查找的問題)

思路

線性查找

image.png

此處準(zhǔn)備了6個(gè)箱子(即長(zhǎng)度為6的數(shù)組)來存儲(chǔ)數(shù)據(jù)。假設(shè)我們需要查詢Ally的性別,由于不知道Ally的數(shù)據(jù)存儲(chǔ)在哪個(gè)箱子里,所以只能從頭開始查詢。這個(gè)操作便叫作“線性查找”


image.png

數(shù)據(jù)量越多,線性查找耗費(fèi)的時(shí)間就越長(zhǎng)。由此可知:由于數(shù)據(jù)的查詢較為耗時(shí),所以此處并不適合使用數(shù)組來存儲(chǔ)數(shù)據(jù)

hash set

keyword--哈希表

哈希表存儲(chǔ)的是由鍵(key)和值(value)組成的數(shù)據(jù)。例如,我們將每個(gè)人的性別作為數(shù)據(jù)進(jìn)行存儲(chǔ),鍵為人名,值為對(duì)應(yīng)的性別。
使用哈希函數(shù)(Hash)計(jì)算Joe的鍵,也就是字符串“Joe”的哈希值。得到的結(jié)果為4928。將得到的哈希值除以數(shù)組的長(zhǎng)度5,求得其余數(shù)。這樣的求余運(yùn)算叫作“mod運(yùn)算”。此處mod運(yùn)算的結(jié)果為3。


image.png

Nell鍵的哈希值為6276, mod 5的結(jié)果為1。本應(yīng)將其存進(jìn)數(shù)組的1號(hào)箱中,但此時(shí)1號(hào)箱中已經(jīng)存儲(chǔ)了Sue的數(shù)據(jù)。這種存儲(chǔ)位置重復(fù)了的情況便叫作“沖突”。


image.png

遇到這種情況,可使用鏈表在已有數(shù)據(jù)的后面繼續(xù)存儲(chǔ)新的數(shù)據(jù)。
為了知道Dan存儲(chǔ)在哪個(gè)箱子里,首先需要算出Dan鍵的哈希值,然后對(duì)其進(jìn)行mod運(yùn)算。最后得到的結(jié)果為4,于是我們知道了它存儲(chǔ)在4號(hào)箱中。
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容