LeetCode015 三數之和

2021-09-22 10:06:46 字數 1734 閱讀 7544

給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。

例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[ [-1, 0, 1],

[-1, -1, 2]

]

思路:遍歷陣列nums,對其中的每乙個數,看看能否在nums中找到另外兩個數和它相加等於0。

class solution:

def threesum(self, nums):

res =

for i in range(len(nums)):

for x,y in enumerate(nums):

if -(nums[i]+y) in nums:

if nums.index(-(nums[i]+y)) != x and i != x and nums.index(-(nums[i]+y)) != i:

num = [nums[i],y,-(nums[i]+y)]

num.sort()

result =

for j in res:

if j not in result:

return result

s = solution()

res = s.threesum([-1, 0, 1, 2, -1, -4])

print(res)

這個**測試的時候超時了。

思路2:首先對陣列從小到大排序,從第乙個數開始遍歷,若該數大於0,後面的數不可能與其相加和為0,所以跳過;否則該數可能是滿足要求的第乙個數,這樣可以轉化為求後面陣列中兩數之和為該數的相反數的問題。定義兩個指標一前一後,若找到兩數之和滿足條件則加入到解集中;若大於和則後指標向前移動,反之則前指標向後移動,直到前指標大於等於後指標。這樣遍歷第乙個數直到陣列的倒數第3位。注意再求和過程中首先判斷該數字是否與前面數字重複,保證解集中沒有重複解。

class solution:

def threesum(self, nums):

nums.sort()#先對陣列排序

res =

i = 0

for i in range(len(nums)):

if i == 0 or nums[i]>nums[i-1]:

l = i+1

r = len(nums)-1

while l < r:

s = nums[i] + nums[l] +nums[r]

if s ==0:

l +=1

r -=1

#判斷答案是否數字重複

while l < r and nums[l] == nums[l-1]:

l += 1

while r > l and nums[r] == nums[r+1]:

r -= 1

elif s>0:

r -=1

else :

l +=1

return res

s = solution()

res = s.threesum([-1, 0, 1, 2, -1, -4])

print(res)

015三數之和

寫在前面,參考力扣官網的畫解演算法。真的太清晰明了了 15 三數之和 lc code start class solution return ans lc code end 1 首先對陣列進行排序,排序後固定乙個數nums i 2 再使用左右指標,指向nums i 後面部分的兩端,數字分別為nums...

leetcode 三數之和

給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 因為這次是要求輸出對應的三...

LeetCode 三數之和

題目描述 給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 題目分析 有序陣...