18 四數之和

2021-09-19 13:46:52 字數 2631 閱讀 8400

給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d ,使得 a + b + c + d 的值與 target 相等?找出所有滿足條件且不重複的四元組。

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

示例:給定陣列 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

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

[[-1, 0, 0, 1],

[-2, -1, 1, 2],

[-2, 0, 0, 2]

]解法1:

排序雙指標

避免重複統計

但是力扣提交 超出時間限制

class

solution

:def

foursum

(self, nums: list[

int]

, target:

int)

-> list[list[

int]]:

result =

# 排序

nums.sort(

)

n =len(nums)

for i in

range

(n):

# 避免重複統計

if i >

0and nums[i]

== nums[i -1]

:continue

for j in

range

(i +

1, n)

:# 避免重複統計

if j > i +

1and nums[j]

== nums[j -1]

:continue

left = j +

1 right = n -

1while left < right:

sum= nums[i]

+ nums[j]

+ nums[left]

+ nums[right]

ifsum

== target:

[nums[i]

, nums[j]

, nums[left]

, nums[right]])

elif

sum< target:

left +=

1# 避免重複統計

while nums[left]

== nums[left -1]

and left < right:

left +=

1else

: right -=

1# 避免重複統計

while nums[right]

== nums[right +1]

and left < right:

right -=

1return result

解法2:

class

solution

:def

foursum

(self, nums: list[

int]

, target:

int)

-> list[list[

int]]:

res =

set(

)# 排序

nums.sort(

)

n =len(nums)

# 字典 key是兩數之和 value是列表 存的是乙個個元組 元組中兩索引代表的兩數之和為key

dict

=for i in

range

(n):

for j in

range

(i +

1, n)

: key = nums[i]

+ nums[j]

if key in

dict

.keys():

dict

[key]

(i, j)

)else

:dict

[key]=[

(i, j)

]for i in

range

(n):

for j in

range

(i +

1, n -2)

:

key = target - nums[i]

- nums[j]

if key in

dict

.keys():

index_list =

dict

[key]

for index in index_list:

# index中的兩索引必須大於此迴圈中的兩索引

if index[0]

> j:

res.add(

(nums[i]

, nums[j]

, nums[index[0]

], nums[index[1]

]))return

[list

(i)for i in res]

18 四數之和

給定乙個含有 n 個整數的陣列 s,數列 s 中是否存在元素 a,b,c 和 d 使 a b c d target 請在陣列中找出所有滿足各元素相加等於特定值 的不重複組合。注意 解決方案集不能包含重複的四元組合。例如,給定陣列 s 1,0,1,0,2,2 並且給定 target 0。示例答案為 1...

18 四數之和

給定乙個包含 n 個整數的陣列nums和乙個目標值target,判斷nums中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與target相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。示例 給定陣列 nums 1,0,1,0,2,2 和 target ...

18 四數之和

給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與 target 相等?找出所有滿足條件且不重複的四元組。給定陣列 nums 1,0,1,0,2,2 和 target 0。滿足要求的四元組集合為 ...