@@ -22,17 +22,16 @@ def classic_double_index(self, nums: List[int], target: int) -> List[List[int]]:
22
22
if v * 4 > target :
23
23
break
24
24
# 当数组最大值和都小于target或者已经遍历过,遍历下一个
25
- if v + 3 * nums [- 1 ] < target or (v == nums [k - 1 ] and k > 0 ):
25
+ if v + 3 * nums [- 1 ] < target or (v == nums [k - 1 ] and k > 0 ):
26
26
continue
27
27
for _k , _v in enumerate (nums [k + 1 :- 2 ], k + 1 ):
28
28
# 同理
29
29
if v + _v * 3 > target :
30
30
break
31
- if v + _v + nums [- 1 ]* 2 < target or (_v == nums [_k - 1 ] and _k > k + 1 ):
31
+ if v + _v + nums [- 1 ]* 2 < target or (_v == nums [_k - 1 ] and _k > k + 1 ):
32
32
continue
33
33
R = len (nums )- 1
34
- L = max (_k + 1 , bisect .bisect_left (nums ,
35
- target - nums [R ] - _v - v , _k + 1 , R ) - 1 )
34
+ L = max (_k + 1 , bisect .bisect_left (nums , target - nums [R ] - _v - v , _k + 1 , R ) - 1 )
36
35
while L < R :
37
36
_sum = v + _v + nums [L ]+ nums [R ]
38
37
if _sum == target :
@@ -43,39 +42,39 @@ def classic_double_index(self, nums: List[int], target: int) -> List[List[int]]:
43
42
else :
44
43
L , R = L + (_sum < target ), R - (_sum > target )
45
44
return [list (_ ) for _ in set (self .result )]
46
-
45
+
47
46
def brute_for (self , nums : List [int ], target : int ) -> List [List [int ]]:
48
47
nums .sort ()
49
48
if len (nums ) < 4 :
50
49
return []
51
- counter = {}
50
+ counter = {}
52
51
for n in nums :
53
- counter [n ]= counter .get (n ,0 )+ 1
52
+ counter [n ] = counter .get (n , 0 )+ 1
54
53
"""双指针"""
55
54
for k , v in enumerate (nums [:- 3 ]):
56
55
# 当数组最小值和都大于target 跳出
57
56
if v * 4 > target :
58
57
break
59
58
# 当数组最大值和都小于target或者已经遍历过,遍历下一个
60
- if v + 3 * nums [- 1 ] < target or (v == nums [k - 1 ] and k > 0 ):
59
+ if v + 3 * nums [- 1 ] < target or (v == nums [k - 1 ] and k > 0 ):
61
60
continue
62
- counter [v ]-= 1
61
+ counter [v ] -= 1
63
62
for _k , _v in enumerate (nums [k + 1 :- 2 ], k + 1 ):
64
63
# 同理
65
64
if v + _v * 3 > target :
66
65
break
67
- if v + _v + nums [- 1 ]* 2 < target or (_v == nums [_k - 1 ] and _k > k + 1 ):
66
+ if v + _v + nums [- 1 ]* 2 < target or (_v == nums [_k - 1 ] and _k > k + 1 ):
68
67
continue
69
- counter [_v ]-= 1
70
- for __k in range (_k if counter [_v ]> 0 else _k + 1 ,len (nums )):
71
- c = nums [__k ]
72
- d = target - v - _v - c
73
- if c > d :
68
+ counter [_v ] -= 1
69
+ for __k in range (_k if counter [_v ] > 0 else _k + 1 , len (nums )):
70
+ c = nums [__k ]
71
+ d = target - v - _v - c
72
+ if c > d :
74
73
break
75
- if d not in counter or c == d and counter [c ]< 2 :
74
+ if d not in counter or c == d and counter [c ] < 2 :
76
75
continue
77
- self .result .append ((v ,_v ,c , d ))
78
- counter [_v ]+= 1
76
+ self .result .append ((v , _v , c , d ))
77
+ counter [_v ] += 1
79
78
return [list (_ ) for _ in set (self .result )]
80
79
81
80
def fourSum (self , nums : List [int ], target : int ) -> List [List [int ]]:
@@ -88,4 +87,4 @@ def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
88
87
# @lc code=end
89
88
if __name__ == "__main__" :
90
89
test = Solution ()
91
- print (test .fourSum ([0 ,0 , 0 , 0 ], 0 ))
90
+ print (test .fourSum ([0 , 0 , 0 , 0 ], 0 ))
0 commit comments