LeetCode刷題 18 四數之和

2021-10-06 12:04:21 字數 3620 閱讀 6947

給定乙個包含 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]

]

這題是三數之和的變種,還是雙指標的應用。

只是在最外層多加一層for迴圈巢狀罷了。

**只是在三數之和的**上加了一層j迴圈。

class

solution

:def

foursum

(self, nums: list[

int]

, target:

int)

-> list[list[

int]]:

if(not nums or

len(nums)

<4)

:return

nums.sort(

) res=

for i in

range

(len

(nums)-3

):#排除重複的nums[i]

if(i>

0and nums[i]

==nums[i-1]

):continue

for j in

range

(i+1

,len

(nums)-2

):#排除重複的nums[j]

if(j>i+

1and nums[j]

==nums[j-1]

):continue

l=j+

1 r=

len(nums)-1

while l

sum= nums[i]

+nums[j]

+nums[l]

+nums[r]

ifsum

==target:

[nums[i]

,nums[j]

,nums[l]

,nums[r]])

l=l+

1 r=r-

1elif

sum< target:

l=l+

1else

: r=r-

1#排除重複的nums[l],nums[r]

while

(l==nums[l+1]

):l=l+

1while

(l==nums[r-1]

):r=r-

1return res

測試是跑成功了,但是,沒想到提交時,卻報錯了。。。

計算了下,發現是l,r去重時,因為0,0相鄰,又,[-5,-4,0,0]是正解,程式直接把這個解跳過了。好吧,那就去除相鄰時的去重情況,修改如下:

#排除重複的nums[l],nums[r]

這下總ojbk了把?

class

solution

:def

foursum

(self, nums: list[

int]

, target:

int)

-> list[list[

int]]:

if(not nums or

len(nums)

<4)

:return

nums.sort(

) res=

for i in

range

(len

(nums)-3

):#排除重複的nums[i]

if(i>

0and nums[i]

==nums[i-1]

):continue

for j in

range

(i+1

,len

(nums)-2

):#排除重複的nums[j]

if(j>i+

1and nums[j]

==nums[j-1]

):continue

l=j+

1 r=

len(nums)-1

while l

sum= nums[i]

+nums[j]

+nums[l]

+nums[r]

ifsum

==target:

[nums[i]

,nums[j]

,nums[l]

,nums[r]])

#排除重複的nums[l],nums[r]

emmmm,總算成功了!

不過,這樣的結果,果然不能交差吧?畢竟是o(n^3)的複雜度。

待更新。。。

好了,!完結撒花~

同時,貼上咱的個人部落格,歡迎客官大老爺們來訪~

青楓閣

leetcode刷題之路18 四數之和

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

leetcode刷題python之四數之和

class solution def foursum self,nums list int target int list list int nums.sort length len nums result if length 4 return for i in range length 3 if ...

LeetCode C 刷題計畫 18 四數之和

author csu張揚 email csuzhangyang gmail.com or csuzhangyang qq.com category difficulty pass rate br algorithms medium 36.01 array hash table two pointer...