leetcode 8 三數之和

2022-06-13 03:57:10 字數 1269 閱讀 1897

給定乙個包含 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 題目分析 有序陣...