LeetCode 15 三數之和

2021-10-18 13:30:30 字數 1718 閱讀 8745

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