LeetCode 15 三數之和

2022-03-26 04:27:13 字數 1534 閱讀 3388

difficulty:中等

給你乙個包含n個整數的陣列nums,判斷nums中是否存在三個元素 _a,b,c ,_使得 a + b + c = 0 ?請你找出所有和為0且不重複的三元組。

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

示例 1:

輸入:nums = [-1,0,1,2,-1,-4]

輸出:[[-1,-1,2],[-1,0,1]]

示例 2:

輸入:nums = 

輸出:

示例 3:

輸入:nums = [0]

輸出:

solution

解法一:暴力解法,時間複雜度為o(n^3),巢狀了三層迴圈

class solution:

def threesum(self, nums: list[int]) -> list[list[int]]:

nums.sort()

res =

for i in range(len(nums)):

tmp = self.twosumhelper(nums[i+1:], 0-nums[i])

for item in tmp:

return [list(t) for t in set(tuple(_) for _ in res)]

def twosumhelper(self, nums, target):

d, ans = {},

for i in range(len(nums)):

if target - nums[i] in d:

d[nums[i]] = i

return ans

解法二:時間複雜度為o(n^2),思路是求a+b+c=0,等價於a=-(b+c),即在nums[i+1:]列表中尋找滿足-(b+c)的數字。

class solution:

def threesum(self, nums: list[int]) -> list[list[int]]:

if len(nums) < 3:

return

nums.sort()

res = set()

for i, v in enumerate(nums[:-2]):

if i >= 1 and v == nums[i-1]:

continue

d = {}

for x in nums[i+1:]:

if x not in d:

d[-v-x] = 1

else:

res.add((v, -v-x, x))

return list(res)

LeetCode 15 三數之和

15.給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組 方法一,個人解法正確,但是效率太低,時間複雜度o n 3 時間超時,無法提交至leetcode public s...

leetcode 15 三數之和

給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 class solutio...

leetcode15 三數之和

給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 先找兩數之和,然後再用un...