time: 20190920
type: medium
給定乙個包含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]]
本題是三數之和的延續。也包含去重,所以,排序是基本操作。
三數之和是固定乙個數,然後在後面用雙指標查詢,四數之和是固定兩個數,然後用雙指標在後面查詢。
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...