給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
雙指標
from collections import defaultdict
class solution:
def threesum(self, nums):
nums = sorted(nums)
ans =
if len(nums)<3:
return
for i in range(len(nums)):
if i>0 and nums[i-1] == nums[i]:
continue
if nums[i]>0:
break
l = i+1
r = len(nums)-1
while l0:
r-=1
elif nums[i]+nums[l]+nums[r]<0:
l+=1
return ans
#s = solution()
#print(s.threesum([0,0,0]))
利用數學性質
class solution:
def threesum(self, nums):
hashmap = {}
res =
for i, x in enumerate(nums):
hashmap[x] = hashmap.get(x, 0) + 1 #get(x,0)的含義:如果無x,加入x並記錄次數1;如果有x,x出現次數加一
if 0 in hashmap and hashmap[0] >= 3:
neg = list(filter(lambda x: x < 0, hashmap))
pos = list(filter(lambda x: x >= 0, hashmap))
for i in neg:
for j in pos:
k = 0 - i - j
if k in hashmap:
if (k == i or k == j) and hashmap[k] >= 2:
if k < i or k > j: # 避免重複,要求i,j是連續的
return res
s = solution()
print(s.threesum([0,0,0]))
兩數相加 LeetCode (8)
給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原...
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 題目分析 有序陣...