算法題整整理

1.鏈表是否有環(huán),找出環(huán)的入口

答:

是否有環(huán),快慢指針,最后兩個(gè)指針重合了,就有環(huán)。

環(huán)入口:思路如下,設(shè)head到入口的距離為a,入口到交點(diǎn)的距離為x,環(huán)長(zhǎng)為r

則,慢指針走了a + x,快指針走了a+x+nr,因?yàn)榭熘羔樧叩氖?倍的慢指針,有

a+x+nr = 2(a + x) ->nr = a + x -> a = nr - x;由于一個(gè)指針從相交點(diǎn)開(kāi)始走了nr-x時(shí),正好走到了環(huán)的入口(可畫(huà)圖看一下),而這個(gè)距離恰巧等于從頭結(jié)點(diǎn)到環(huán)入口的距離。因此,尋找入口,就用兩個(gè)指針,一個(gè)在頭結(jié)點(diǎn),一個(gè)在相交點(diǎn),走到兩指針相遇,則是環(huán)的入口。

2.LRU cache

雙向鏈表 + hashmap?

或者linked hashmap

linkedhashmap做法:初始化,第三個(gè)參數(shù)(accessOrder = true),重寫(xiě)removeEldest方法,return size() > capacity

3.數(shù)組中出現(xiàn)次數(shù)超過(guò)一半的數(shù)字

根據(jù)數(shù)組特點(diǎn),數(shù)組中一個(gè)數(shù)組出現(xiàn)的次數(shù)超過(guò)數(shù)組長(zhǎng)度的一半,即它出現(xiàn)的次數(shù)比其他所有數(shù)字出現(xiàn)次數(shù)的和還要多。

因此,遍歷數(shù)組時(shí),保留兩個(gè)值,一個(gè)是數(shù)組中的一個(gè)數(shù)字,一個(gè)是次數(shù)。

當(dāng)我們遍歷到下一個(gè)數(shù)字的時(shí)候,如果下一個(gè)數(shù)字和我們之前保存的數(shù)字相同,則次數(shù)加1,;如果下一個(gè)數(shù)字和我們之前保存的數(shù)字不同,則次數(shù)減1,。如果次數(shù)為0,我們需要保存下一個(gè)數(shù)字,并把數(shù)字設(shè)為1,。由于我們要找的數(shù)字出現(xiàn)的次數(shù)比其他所有數(shù)字出現(xiàn)的次數(shù)還要多,那么要找的數(shù)字肯定是最后一次把次數(shù)設(shè)為1時(shí)對(duì)應(yīng)的數(shù)字。

4.超過(guò)1/3的數(shù)字:同理,用兩個(gè)變量來(lái)保留


5.數(shù)組中除了一個(gè)數(shù),其他數(shù)字都出現(xiàn)2次,找出這個(gè)數(shù)

方法,異或 符號(hào)是^;

6。數(shù)組中除了一個(gè)數(shù),其他數(shù)字都出現(xiàn)3次,找出這個(gè)數(shù)

轉(zhuǎn)成二進(jìn)制,然后按位加在一起,在mod 3,得到結(jié)果


最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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