Contents
  1. 1. 3sum
  2. 2. 3sumClosest
  3. 3. 4Sum
    1. 3.0.1. 代码

3sum

这道题看似很简单,但是容易超时。

  • 首先排序
  • 然后一个首指针,一个尾指针,前后搜索。
  • 时间复杂度O(N*N)

3sumClosest

  • 这道题目与3Sum方法相似,只需每次判断是否距离target最近即可。
  • 时间复杂度O(N*N)

4Sum

  • 最简单的方法是按照3Sum的思路,再添加一次循环,时间的复杂度为O(N*N*N),但是无论怎么优化,提交之后老是超时。而同样的方法C++可以提交成功,说明python的运行速度偏慢。
  • 借鉴南郭子廭的思路,采用哈希的思路,采用空间换时间的。首先建立一个字典dict,字典的key值为数组中每两个元素的和,每个key对应的value为这两个元素的下标组成的元组,元组不一定是唯一的。
  • 如对于num=[1,2,3,2]来说,dict={3:[(0,1),(0,3)], 4:[(0,2),(1,3)], 5:[(1,2),(2,3)]}。
  • 由于需要去重,这里选用set()类型的数据结构,即无序无重复元素集。最后将每个找出来的解(set()类型)转换成list类型输出即可。
  • python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素.
  • 时间复杂度为O(N*N+N*N)=O(N*N)

代码


有志者事竟成

Contents
  1. 1. 3sum
  2. 2. 3sumClosest
  3. 3. 4Sum
    1. 3.0.1. 代码