Skip to content

Latest commit

 

History

History

15.3Sum

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

K Sum是一类问题。

先说一下3Sum的思路:

1、先对数组进行排序(Java提供了排序算法Arrays.sort(int []a))

2、核心思想是先确定一个数,然后再剩下的数中去确定另外两个数。确定第一个数是按顺序遍历,剩下两个数在第一个数所在位置后面的数中找,因为数组是有序的,不需要向前找。

在解题过程有一些技巧:

1、寻找另外两个数的时候从采用从数组两边向中间收缩的方式。因为数组是有序的,所以如果三个数的和大于0,右侧指针左移;如果三个数的和小于0,左侧指针右移。这种方法复杂度为O(n)

2、如果首先确定的这个数和数组前一个位置相等,说明以这个数为第一个数的所有组合已经找到了,再找一遍不但时间复杂度高了,而且还会导致出现结果重复。

3、寻找另外两个数的时候,从已经确定的那个数的后面开始寻找,因为如果往前找,也会出现重复。

4、当从两头收缩寻找另外两个数的时候,如果当前要比对的数和刚刚比对过的数相同的话,跳过当前数,向中间收缩一个位置。这也是防止重复的方法。