15 三數之和(哨兵 雙指標)

2021-10-01 19:17:26 字數 869 閱讀 8644

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。

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

例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[ [-1, 0, 1],

[-1, -1, 2]

]

class solution:

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

'''1.排序

2.利用雙指標和哨兵尋找點

3.去重,哨兵檢測去重;雙指標迴圈去重

'''n=len(nums)

if (not nums) or n<3:

#剔除空集和小於三位數的情況

return

res=

#先排序,很重要

nums.sort()

print(nums)

for i in range(n):

'''i為哨兵,三元組第乙個,之後利用left,right雙指標尋找。'''

if(i>0 and nums[i]==nums[i-1]):

#剔除掉,前後哨兵一致的情況

continue

left=i+1

right=n-1

while(left0):

#和大於,說明數太大,換小的

right-=1

else:

#和小於,說明數太小,換大的

left+=1

return res

Leetcode15 三數之和(雙指標)

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

leetcode15 三數之和 雙指標

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

三數之和(雙指標)

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