LeetCode演算法 三數和為零 Python

2021-10-05 01:22:11 字數 2323 閱讀 6840

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0

?找出所有滿足條件且不重複的三元組。

1、先排序,從小到大開始

2、最外層使用for迴圈, 從0到 len(nums),全部走一遍

3、每迴圈一次,i位置數 和

後面的數中查詢兩個數,使得三個數的和為0

4、後面的兩個數可以定位i位置的後乙個數 l 和數列中最後乙個數 r

5、根據三個數的和結果,如果剛好是0,則 l+1, r-1 再找一組解

6、如果和的結果 大於0,右邊的值向左移動 ,即r-1

7、如果和的結果 小於0,左邊的值向右移動, 即 l+1

8、以上操作中, 可以需要多次執行(while迴圈),退出的條件是l < r

class

solution

(object):

defthreesum

(self, nums)

: nums.sort(

)# 排序

res =

for i in

range

(len

(nums)):

# 遍歷每乙個數

if i ==

0or 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:

[nums[i]

, nums[l]

, nums[r]])

# 再找下一組解

l +=

1 r -=

1# 左邊向右移動到不重複數為止

while l < r and nums[l]

== nums[l -1]

: l +=

1# 右邊向左邊移動不重複數為止

三個數和為零

給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則按照第二小的數排序。input 第1行,1個數n,n為陣列的長度 0 n 10...

leetcode 三數之和為0

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

陣列中三個數和為零

前面看到的問題是陣列a中,和為固定值sum的兩個數。我們一般的做法是先給陣列排序,然後陣列前後各有乙個下標i j,如果a i a j sum,則j 如果a i a j 有乙個類似的擴充套件問題就是 找到乙個是陣列中和為零的三個數,一般的解決方法也是設定三個下標變數,i,j和k。每次固定i,然後尋找滿...