K-SUM解題思路
本總結(jié)參考:博客,Sigmainfy,Ksum整理
求和問題描述(K sum problem):
K sum的求和問題一般是這樣子描述的:給你一組N個(gè)數(shù)字(比如 vector num), 然后給你一個(gè)目標(biāo)常數(shù)(比如 int target) ,我們的目的是在這一堆數(shù)里面找到K個(gè)數(shù)字,使得這K個(gè)數(shù)字的和等于target。
K Sum求解方法, 適用2Sum, 3Sum, 4Sum:
方法一: 暴力,就是枚舉所有的K-subset, 那么這樣的復(fù)雜度就是 從N選出K個(gè),復(fù)雜度是O(N^K),顯然不會(huì)考察這種方法
方法二: 雙指針,這個(gè)算法可以考慮最簡(jiǎn)單的case, 2sum,這是個(gè)經(jīng)典問題,方法就是先排序,然后利用頭尾指針找到兩個(gè)數(shù)使得他們的和等于target,其他Ksum都是同樣的思路,只不過要固定前K-2個(gè)(利用循環(huán))該方法最容易理解
方法三:哈希表
將可能的解存儲(chǔ)在hash表中,在數(shù)據(jù)量很大的時(shí)候,去重才能維持很好的效率,不然可能超時(shí)。效率高
題目匯總
總結(jié)
哈希表和雙指針都是重要的思路。