python數圈演算法 演算法題 三數之和

2021-10-19 03:15:40 字數 1028 閱讀 3677

題目**於力扣

理論基礎雜湊表

三數之和

題目描述三數之和

示例給定 [-1,0,1,2,-1,-4], target=0

解題思路暴力解法 o(n^3)

a+b+c=0 o(n^2)

雙指標python 解法# a+b+c=0

def threesum(self, nums):

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 map(list, res)

# 雙指標

def threesum(self, nums):

res =

nums.sort()

for i in xrange(len(nums)-2):

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

cintinue

l, r = i+1, len(nums)-1

while l < r:

s = nums[i] + nums[l] + nums[r]

if s < 0: l += 1

elif s > 0: r -= 1

else:

# 判重處理

while l < r and nums[l] == nums[l+1]:

l += 1

while l < r and nums[r] == nums[r-1]:

r -= 1

l += 1; r -= 1

return res

演算法題 三數之和

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

leetcode演算法題 三數之和

排序 雙指標法 先將數列從小到大排序 先選擇乙個數,這一步時間複雜度為o n 在這個數後面的數中用雙指標分別從頭尾遍歷,找到符合條件的數,直到頭尾指標相遇,這一步時間複雜度為o n 迴圈執行第2 3步,總時間複雜度為o n n void twosum vector int nums,int targ...

LeetCode 三數之和演算法題

思路 1.先將陣列排序,目的是便於去重,以及在特殊情況下,讓程式提前結束 2.使用三個指標,第乙個指標從陣列第乙個元素遍歷到最後乙個元素 第二個指標從第乙個指標後一位往後遍歷,第三個指標從陣列最後一位元素往前遍歷 3.當陣列元素相同時,要跳過 public list threesum int num...