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...