最近看知乎大神挑戰(zhàn)面試算法題 3 SUM. ?我決定也復(fù)習(xí)一下
這道題真的非常復(fù)雜,感覺第一次見的話真的是妥妥的跪。?
大概的想法就是先sort好兵志, 這樣的話方便使用Binary 的思想來移動(dòng)指針。然后雙指針大法好!
首先冗美,我們用一個(gè)指針頭指向Front, 一個(gè)指針指向Tail.
3sum = 0 = front + middle + end.
每一次循環(huán),先保存Head 指針位置不變析二,然后移動(dòng)middle 和 tail指針粉洼。根據(jù)目前3個(gè)人的sum到達(dá)什么程度: 比0大的話,就移動(dòng)tail指針 這樣可以讓sum小一點(diǎn)叶摄。 比0小移動(dòng)middle讓sum大一點(diǎn)属韧。當(dāng)==0的時(shí)候,加進(jìn)list蛤吓。
然后下一輪循環(huán)宵喂,front 移動(dòng)一下,然后恢復(fù)end 到最后的位置会傲」兀【這個(gè)我一開始考慮錯(cuò)了,是個(gè)重點(diǎn)】