給定乙個包含 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 題目分析 有序陣...