給定乙個包含 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,然後尋找滿...