刷題第三天
160. 相交鏈表:
這題雖然是簡(jiǎn)單題,但讓我心力交瘁,暴力解是可以,但總覺(jué)得有更好的方法,因此我看了題解。假設(shè)a鏈總長(zhǎng)為a,b鏈總長(zhǎng)b,相交鏈長(zhǎng)度c,那么a走到末尾時(shí),換走b,b走完換走a,這樣,當(dāng)ab相遇時(shí),走的路徑就是a+(b-c)=b+(a-c),就很奇妙?。?!相遇就兩種情況,一種是找到了相交的點(diǎn),一種是到末尾(null)。

142. 環(huán)形鏈表 II:
這題我設(shè)置了一個(gè)map,存下每次走過(guò)的節(jié)點(diǎn)的次數(shù),當(dāng)次數(shù)等于2時(shí),則遇到了環(huán)。
看了題解,用到了快慢指針。我一開(kāi)始想到的也是快慢指針,但因?yàn)榱私獠欢啵恢涝撛趺醋?,就放棄了?/p>
fast每次走兩步,slow每次走一步,設(shè)a為環(huán)前長(zhǎng)度,b為環(huán)長(zhǎng)度,當(dāng)fast與slow相遇時(shí),f=2s=s+nb,s=nb,那么為了找到環(huán)的開(kāi)始節(jié)點(diǎn),假設(shè)從head開(kāi)始走,需要走a+nb,因此s只要再走a步即可。

242. 有效的字母異位詞:
開(kāi)始了哈希表。這題我用的map。先看兩個(gè)字符串的長(zhǎng)度是否相等,相等再繼續(xù)。如果相等的話,設(shè)兩個(gè)map<char,int>,分別記錄字符串各個(gè)字符的數(shù)量。再比較兩個(gè)map存的字符數(shù)量是否相等。

1002. 查找共用字符:
沿用上題的思想,設(shè)兩個(gè)map<char,int> m,maps,maps記錄最終要輸出字符的數(shù)量,m記錄每個(gè)字符串各個(gè)字符的數(shù)量,maps用第一個(gè)字符串初始化。之后每次和下一個(gè)字符串的m進(jìn)行比較,取maps[c]和m[c]的最小值。最后,輸出maps即可。

349. 兩個(gè)數(shù)組的交集:
這題和242是類似的。不過(guò)我只設(shè)置了一個(gè)數(shù)組v記錄下nums1的每個(gè)數(shù)字的數(shù)量,數(shù)組下標(biāo)的含義就是nums1里的數(shù)字。之后再循環(huán)nums2,如果以nums2的數(shù)字為下標(biāo)的v不為空,則將該數(shù)字記錄到結(jié)果集res中,要記得將以nums2的數(shù)字為下標(biāo)的v清空。