leecode python三數之和

2021-10-03 15:11:37 字數 1637 閱讀 2042

題目:

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

例項:nums = [-1,0,1,2,-1,-4];

滿足條件的三元組為:

[[-1,0,1],

[-1,-1,2]

]`

class

solution

:def

threesum

(self, nums: list[

int])-

> list[list[

int]]:

l =len(nums)

nums.sort(

)

res =

if l <

3or nums[0]

>

0or nums[l-1]

<0:

return res

for i in

range

(l):

if nums[i]

>0:

break

if i >

0and nums[i]

== nums[i-1]

:continue

j = i +

1

r = l -

1while j < r:

if nums[i]

+ nums[j]

+ nums[r]==0

:

temp =

[nums[i]

,nums[j]

,nums[r]

]

while j < r and nums[j]

== nums[j+1]

:

j +=

1while j < r and nums[r]

== nums[r-1]

:

r -=

1

j +=

1

r -=

1elif nums[i]

+ nums[j]

+ nums[r]

>

0:

r -=

1elif nums[i]

+ nums[j]

+ nums[r]

<

0:

j +=

1return res

1、排序後,因為和是0 ,所以當陣列遍歷到正數時,就沒有遍歷的必要了;

2、使用三個指標i,j,r:

1)i從陣列頭遍歷到正數為止, 對於每乙個i ,找j,和看有無三數和為0的情況;

2)j初始從i+1開始,r從陣列尾部開始,遍歷,如果三數和=0,將三指標對應的數加入答案中,並進行去重(分別檢查j和r定位到不重複的地方)

3)如果三數之和<0,j前進 和》0,r後退

leecode python中檔題 2 兩數相加

給你兩個 非空 的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。definition for singly linked list.c...

leecode python簡單題 7 整數反轉

給你乙個 32 位的有符號整數 x 返回 x 中每位上的數字反轉後的結果。如果反轉後整數超過 32 位的有符號整數的範圍 231,231 1 就返回 0。假設環境不允許儲存 64 位整數 有符號或無符號 class solution def reverse self,x int int num 0 ...

兩數,三數之和

列舉陣列中所有可能的互不相同的三元組使其和為0 排序 雙指標 先不考慮時間複雜度,最簡單的想法是列舉所有三元組 for i in range n for j in range i 1 n for k in range j 1 n a i a j a k 這樣會有重複,那什麼導致了重複呢?無非是兩種情...