三數之和 (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...