Leetcode18 四數之和

2021-09-27 07:16:26 字數 1983 閱讀 3831

time: 20190920

type: medium

給定乙個包含n個整數的陣列nums和乙個目標值target,判斷nums中是否存在四個元素abcd,使得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]]

本題是三數之和的延續。也包含去重,所以,排序是基本操作。

三數之和是固定乙個數,然後在後面用雙指標查詢,四數之和是固定兩個數,然後用雙指標在後面查詢。

class

solution

:def

foursum

(self, nums: list[

int]

, target:

int)

-> list[list[

int]]:

iflen

(nums)

<

4or nums ==

none

:return

none

nums.sort(

) res =

for i in

range

(len

(nums)):

if i >

0and nums[i]

== nums[i-1]

:continue

newtarget = target - nums[i]

for j in

range

(i +1,

len(nums)):

if j > i +

1and nums[j]

== nums[j-1]

:continue

newtarget2 = newtarget - nums[j]

m = j +

1 n =

len(nums)-1

while m < n:

if nums[m]

+ nums[n]

== newtarget2:

temp =

[nums[i]

, nums[j]

, nums[m]

, nums[n]

]while m < n and nums[m]

== nums[m+1]

: m +=

1while m < n and nums[n]

== nums[n-1]

: n -=

1 m +=

1 n -=

1elif nums[m]

+ nums[n]

> newtarget2:

n -=

1elif nums[m]

+ nums[n]

< newtarget2:

m +=

1return res

2019.10 update:

end.

LeetCode 18 四數之和

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

LeetCode 18 四數之和

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

leetcode18 四數之和

def foursum nums,target numlen,res,d len nums set if numlen 4 return nums.sort 二層迴圈遍歷任意兩個元素對和存放到字典d裡並把序號存起來 for p in range numlen for q in range p 1,n...