給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d ,使得 a + b + c + d 的值與 target 相等?找出所有滿足條件且不重複的四元組。
解題思路和三數之和類似
唯一區別需要巢狀遍歷陣列,前兩個數a,b分別遍歷迴圈,在迴圈內用雙指標指向另外兩個數c,d.通過移動指標尋找四數之和等於target的陣列
class
solution
:def
foursum
(self, nums: list[
int]
, target:
int)
-> list[list[
int]]:
nums.sort(
) n =
len(nums)
result =
if(not nums or n <4)
:return result
for i in
range
(n-3):
if i >
0and nums[i]
== nums[i -1]
:continue
for b in
range
(i+1
,n-2):
c = b +
1 d = n -
1if b > i +
1and nums[b]
== nums[b-1]
:continue
while c < d:
if nums[i]
+ nums[b]
+ nums[c]
+ nums[d]
== target:
[nums[i]
,nums[b]
,nums[c]
,nums[d]])
while c < d and nums[c]
== nums[c+1]
: c +=
1while c < d and nums[d]
== nums[d-1]
: d -=
1 c +=
1 d -=
1elif nums[i]
+ nums[b]
+ nums[c]
+ nums[d]
< target:
c +=
1else
: d -=
1return result
N數之和(力扣 二三四數之和總結)
本類題可分為兩類,一種是利用雜湊表直接進行查詢,另一種是利用雙指標進行雙向查詢。力扣01.兩數之和 力扣454.四數相加 需要利用雜湊表時的題目特徵 1,多個數不來自於同乙個陣列,這樣不需要考慮同一陣列中重複選擇數字的問題。2,如果數字是來自同乙個陣列,那麼不超過兩個。由於利用雜湊表時是借助其鍵值對...
兩數之和 力扣
這是我寫的第一篇部落格,以前也有過想法,但是總是懶惰,昨晚正好開始刷力扣,就用部落格全程記錄一下吧。刷的第一道題目是兩數之和,題目是這樣的 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。...
力扣 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...