0 题目描述
leetcode原题链接:三数之和
1 排序+双指针解法
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
n = len(nums)
if (not nums or n < 3): return []
nums.sort()
res = []
for i in range(n):
if (nums[i] > 0): return res
if (i > 0 and nums[i] == nums[i - 1]): continue
# 双指针L,R
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
2
)
O(n^2)
O(n2),数组排序
O
(
N
log
N
)
O(N \log N)
O(NlogN),遍历数组
O
(
n
)
O(n)
O(n),双指针遍历
O
(
n
)
O(n)
O(n),总体
O
(
N
log
N
)
O(N \log N)
O(NlogN)+
O
(
n
2
)
O(n^2)
O(n2)
空间复杂度:
O
(
1
)
O(1)
O(1)