leetcode 三數之和

2021-09-02 17:18:15 字數 1471 閱讀 4334

三數之和 (3 sum)

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

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

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

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

[[-1, 0, 1],

[-1, -1, 2]

]思路

1.直接暴力便利三次,把三個數相加即可,不過時間複雜度為o(n

3)

o(n^)

o(n3)

2.c=-(a+b),這裡設乙個集合set,時間複雜度為o(1),我們列舉a,b需要兩次迴圈o(n

2)

o(n^)

o(n2)。

3.我們首先把這個列表的數給排序sort,這個時間複雜度為o(n

logn

)o(nlogn)

o(nlog

n),那麼變成了[-4,-1,-1,0,1,2],先便利一遍a,o(n),後面再找b,c,判斷三數之和a+b+c如果》0,則我們需要移動c往左,相反,若三數之和小於0,則移動b往右移,因為是線性移動,所以只有o(n

)o(n)

o(n)

的複雜度

這裡的時間複雜度是o(n

2)

o(n^)

o(n2)

**:

class

solution

:def

threesum

(self, nums)

:"""

:type nums: list[int]

:rtype: list[list[int]]

"""res =

nums.sort(

)for i in

range

(len

(nums)-2

):if i>

0and nums[i]

== nums[i-1]

:continue

l = i+

1 r =

len(nums)-1

while ls = nums[i]

+ nums[l]

+ nums[r]

if s <0:

l+=1elif s >0:

r-=1else

:(nums[i]

,nums[l]

,nums[r]))

while l== nums[l+1]

:#記住要去重,否則會超時

l+=1while l== nums[r-1]

: r-=

1 l+=

1;r-=

1return res

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 題目分析 有序陣...

Leetcode 三數之和

解決方案一 class solution else if nums j nums k target else while i 1 1 i return lllist 解決方案2 class solution 如果有3個0,就直接作為乙個解 if zerosize 3 res.add arrays.a...