LeetCode 15 三數之和(python)

2021-09-10 19:37:03 字數 1294 閱讀 8288

分析:寫過「兩數之和」可以稍作思考,找到a,b,c滿足a+b+c=0,就是找到a,b滿足a+b=-c,這就是兩數之和了,再防止重複的結果。

這裡給出相對通用的方案:先對陣列進行排序,再前後夾逼求解,時間複雜度o(n^2)

不單單是三數之和,k數之和也可以這樣推廣,o(max  )

直接看**,在注釋裡解釋,所得結果在陣列中的下標為

i, j, k

class solution:

def threesum(self, nums):

""":type nums: list[int]

:rtype: list[list[int]]

"""target = 0

result = # 我們要返回的結果集

l_num = len(nums)

if l_num < 3:

return result # 長度小於3,直接返回空結果

num = sorted(nums) # 先對陣列進行排序,後續的操作都是為了避免重複的結果

for i in range(l_num-2):

if num[i] > 0: # 太牛批了,這個,理解一下,後面的值都不用考慮了

break #

j = i + 1

if i > 0 and num[i] == num[i-1]:

continue # 這一步是為了排除重複的結果,後面的都是

k = l_num - 1

while j < k:

if num[i] + num[j] + num[k] < target:

j = j + 1

while num[j] == num[j-1] and j < k:

j = j + 1

elif num[i] + num[j] + num[k] > target:

k = k - 1

while num[k] == num[k+1] and j < k:

k = k - 1

else:

print([num[i], num[j], num[k]])

j = j + 1

k = k - 1

while num[j] == num[j-1] and num[k] == num[k+1] and j < k:

j = j + 1

# end while

# end for

return result

刷題github:

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...