難度:中等
給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
示例:
給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[ [-1, 0, 1],
[-1, -1, 2]
]
思路:這個地方也想到乙個剛剛做的乙個題就是雙指標法,不過然後一想,可能需要排序,這裡就有個問題...滿足要求的三元組是否有順序要求...簡單說 排序後的順序可能是[-1,0,1],如果不排序的可能是[0,1,-1],所以先試試...如果不行就找到滿足的三元組後再調整順序。
具體的雙指標法如下:
基本規則:
迴圈過程:
當nums[i]+nums[l]+nums[r]==0nums[i]+nums[l]+nums[r]時,新增元素
若和大於0,說明num[r]太大,r左移
若和小於0,說明num[l]太小,l右移
遇見的坑:重複資料不能...丟棄,否則類似,-1-1,2或者0,0,0這種就查不到了,只能查詢過程中避開,而不能直接去掉
錯誤**(無法找到含重複資料結果):
class solution(object):
def threesum(self, nums):
""":type nums: list[int]
:rtype: list[list[int]]
"""n=len(nums)
res=
#特殊情況
if n<3:
return
#排序nums.sort()
num=
#去重複
for i in range(n):
if nums[i] not in num:
res=
n=len(num)
for i in range(n):
if(num[i]>=0):
return res
#初始化指標
l=i+1
r=n-1
#移動指標
while(l0):
r=r-1
else:
l=l+1
return res
正確**:
class solution(object):
def threesum(self, nums):
""":type nums: list[int]
:rtype: list[list[int]]
"""n=len(nums)
res=
#特殊情況
if 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=i+1
r=n-1
while(l0):
r=r-1
else:
l=l+1
return res
LeetCode 15 三數之和
15.給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組 方法一,個人解法正確,但是效率太低,時間複雜度o n 3 時間超時,無法提交至leetcode public s...
leetcode 15 三數之和
給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 class solutio...
leetcode15 三數之和
給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 先找兩數之和,然後再用un...