排序 + 双指针
- 获得数组长度
- 创建空列表
- 判断nums是否为null以及length是否<3,如果为True输出[]
- 对数组进行排序
- 创建循环,如果nums[i]>0则返回res。因为nums[i]>0时后面就不可能有三个数的和为0,因为数组已经进行了排序,而想加为0必须要有负数。
- 判断nums[i]是否与nums[i-1]重复了,重复了下一个数,没重复进入下面的循环。
- 创建双指针
- 指针指向的数与上一个数重复时+1或-1
代码(Python)
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
n=len(nums)
res=[]
if(not nums or n<3):
return []
nums.sort()
for i in range(n):
if(nums[i]>0):
return res
if(i>0 and nums[i]==nums[i-1]):
continue
L=i+1
R=n-1
while(L<R):
if(nums[i]+nums[L]+nums[R]==0):
res.append([nums[i],nums[L],nums[R]])
while(L<R and nums[L]==nums[L+1]):
L=L+1
while(L<R and nums[R]==nums[R-1]):
R=R-1
L=L+1
R=R-1
elif(nums[i]+nums[L]+nums[R]>0):
R=R-1
else:
L=L+1
return res
总结
一开始没想到排除重复
后面写了一个三重循环的O(N^3)
最后看到LeetCode题解想到双指针
将其化为自己的知识

451

被折叠的 条评论
为什么被折叠?



