LeetCode 015 3Sum

来源:互联网 发布:淘宝客如何设置返利 编辑:程序博客网 时间:2024/05/29 08:41

题目大意是在一个数组中找三个数,使和等于0。要求返回所有满足条件的3个数的组合,按字典序排序,忽略重复的组合。

看到题目要先问一下整数的范围。要考虑一下整数范围很大很小的特殊情况。如果整数范围很大,就需要考虑比较的耗时。如果整数范围很小,就可以用O(n)的排序。这个题目里整数是int类型的任何整数。

有以下几种思路:

  1. 枚举3个数字,时间复杂度O(n^3),肯定不行。
  2. 先排序,枚举两个数字,二分查找第三个数字。时间复杂度O(n^2 logn)。在这题里还是不行。
  3. 先排序, 并且把数字都存到hashmap中,枚举两个数字,在hashmap中查找第三个数字。时间复杂度O(n^2)。
  4. 先排序,在负数中枚举第一个数字,然后参照Two Sum的方法,从两边往中间扫描,得到第二和第三个数字。时间复杂度O(n^2)。

注意:枚举的时候跳过重复的数字,即降低时间开销,又避免了输出重复的结果。

0 0
原创粉丝点击