leetcode練習 三數之和

2021-09-26 19:16:07 字數 1677 閱讀 9076

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

注意:答案中不可以包含重複的三元組。

例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[[-1, 0, 1],

[-1, -1, 2]

]

這個題應該算是一道比較經典的題目

我在大一的時候接觸過這道題目的簡化版

首先要注意這個題目中陣列是存在相同的項,如果不是進行排序的話,我們是需要遍歷整個陣列去尋找相同的項,從而排除相同的情況,這個方法的話會超過時間限制

所以第一步我們需要對陣列進行排序

排序後我們要考慮幾種情況

如果從左往右數 三個數的最左邊乙個如果大於0則整個加和必定大於0

如果此項和下一項相同 那麼結果相同應排除

最後在相加之和為0的情況中也存在重複的情況

這個題目中我學習了sort的方法 和aslist方法

class

solution

else

if(sum>0)

else}}

return list;

}}

結果

python版本

參照上乙個例子兩數之和,通過字典模仿雜湊表查詢最後乙個數

def

threesum

(nums):if

len(nums)

<3:

return

nums.sort(

) target_hash =

res =

res_hash =

for i, first in

enumerate

(nums)

:'''當前元素與前乙個元素相同時, 可直接跳過以優化效能'''

if i >

0and first == nums[i -1]

:continue

for j, second in

enumerate

(nums[i +1:

]):'''檢查兩數之和是否存在於雜湊表中'''

if first + second in target_hash:

target_index = target_hash[first + second]

if target_index == i or target_index == i + j +1:

continue

'''將找到的結果存入另乙個雜湊表中, 避免包含重複結果'''

row =

sorted

([first, second, nums[target_index]])

key =

",".join(

[str

(x)for x in row]

)if key not

in res_hash:

res_hash[key]

=true

return res

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 題目分析 有序陣...

Leetcode 三數之和

解決方案一 class solution else if nums j nums k target else while i 1 1 i return lllist 解決方案2 class solution 如果有3個0,就直接作為乙個解 if zerosize 3 res.add arrays.a...