給定乙個包含 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...