题目:https://leetcode.com/problems/4sum/
代码(github):https://github.com/illuz/leetcode
给一个数列 S ,找出四个数 a,b,c,d 使得a + b + c + d = target。
- 跟之前的 2Sum, 3Sum 和 3Sum Closest 一样的做法,先排序,再左右夹逼,复杂度 O(n^3)。不过用 Python 可能会被卡超时。
- 先求出每两个数的和,放到
HashSet里,再利用之前的 2Sum 去求。这种算法比较快,复杂度O(n*n*log(n)),不过细节要处理的不少。
这里 C++ 用的是算法1, Java, Python 用的是 2。
这题 Java 可以好好地学学 HashMap 的使用, Python 可以学习 set, collection 和 itertools 的一些用法。
(2015-04-02 UPDATE)
这题解法 2 的复杂度是 O(n*n*log(n)),是在 HashMap 操作复杂度是 O(log(n)) 的情况下算出的。
不过是正常都把 HashMap 当成 O(1) 操作的,所以也会把总的复杂度算成 O(n*n)。