15. 三數之和
難度中等2919收藏分享切換為英文接收動態反饋
給你乙個包含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]
輸出:
雙指標:
迴圈遍歷第1個數,第2、3個數在迴圈內做雙指標求2數之和。
class solution(object):
def threesum(self, nums):
""":type nums: list[int]
:rtype: list[list[int]]
"""nums.sort() # 先從小到大排序
counts = len(nums)
res =
# 第乙個數的下標從0開始,nums個數-2結束,做迴圈,其它2個數做雙指標兩數之和
for i, v in enumerate(nums):
if (i == counts - 2) or (v > 0):
break
if (i > 0) and v == nums[i-1]:
continue # 第1個數去重
left = i + 1 # 左指標
right = counts - 1 # 右指標
while left < right:
if v + nums[left] + nums[right] < 0:
left +=1 # 左指標右移
while (left < right) and (nums[left] == nums[left-1]):
left += 1 # 第2個數去重
elif v + nums[left] + nums[right] > 0:
right -=1 # 右指標左移
while (left < right) and (nums[right] == nums[right+1]):
right -= 1 # 第3個數去重
else:
left +=1 # 左指標右移
right -=1 # 右指標左移
while (left < right) and (nums[left] == nums[left-1]):
left += 1 # 第2個數去重
while (left < right) and (nums[right] == nums[right+1]):
right -= 1 # 第3個數去重
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...