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) 乘 (去重复复杂度))