Two Sum
用哈希表,一邊建立一邊搜索,應該是O(n)
python中有內置set類,還有dict類等可以方便使用,注意查看官方文檔
3Sum
首先猜測應該是O(n^2), 那麼就可以用排序O(nlogn),再搜索O(n^2),一個指針p從最前面開始遍歷,對於p的每一個位置,有兩個指針 i,j 在其後,根據和的大小從兩端向中間夾
3Sum Closest
過程與 3Sum 相同,只是記錄的信息不同
4Sum
O(n^3)的方法就不說了,利用空間爲O(n^2)的哈希表可以改進爲時間複雜度爲O(n^2)到O(n^3)之間
首先對所有數排序O(nlogn),建立一個字典dict,記錄兩兩相加的所有和以及得到該和值的兩個數字的位置數對,O(n^2) / O(n^2)
再次 O(n^2) 遍歷,每一次求出兩個數的和,記爲 sum, 再在dict 中查找 target - sum,如果存在,查看存儲的數對是否在求sum所用的數對的後面(保證題目要求a ≤ b ≤ c ≤ d)
如果在後面,則這四個數字組成一組答案
挑出所有的答案,並去除重複即可(其中去重複的時間複雜度不清楚,總體時間複雜度應該是: O(n^2) 乘 (去重複複雜度))