Leetcode15 三數之和 python

2021-10-03 22:27:35 字數 1738 閱讀 9238

難度:中等

給你乙個包含 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...