|
46 | 46 |
|
47 | 47 | <!-- 这里可写通用的实现逻辑 -->
|
48 | 48 |
|
49 | | -"排序 + 双指针"实现。 |
| 49 | +**方法一:排序 + 双指针** |
| 50 | + |
| 51 | +该题和 [0015.三数之和](../0015.3Sum/README.md) 相似,解法也相似。 |
| 52 | + |
| 53 | +时间复杂度为 $O(n^3),ドル空间复杂度为 $O(\log n),ドル其中 $n$ 是数组的长度。 |
50 | 54 |
|
51 | 55 | <!-- tabs:start -->
|
52 | 56 |
|
@@ -171,40 +175,35 @@ public:
|
171 | 175 |
|
172 | 176 | ```go
|
173 | 177 | func fourSum(nums []int, target int) [][]int {
|
174 | | - n, res := len(nums), make([][]int, 0) |
175 | | - if n < 4 { |
176 | | - return res |
177 | | - } |
| 178 | + ans, n := [][]int{}, len(nums) |
178 | 179 | sort.Ints(nums)
|
179 | | - for i := 0; i < n-3; i++ { |
180 | | - if i > 0 && nums[i] == nums[i-1] { |
181 | | - continue |
182 | | - } |
183 | | - for j := i + 1; j < n-2; j++ { |
184 | | - if j > i+1 && nums[j] == nums[j-1] { |
185 | | - continue |
186 | | - } |
187 | | - k, l := j+1, n-1 |
188 | | - for k < l { |
189 | | - if nums[i]+nums[j]+nums[k]+nums[l] == target { |
190 | | - res = append(res, []int{nums[i], nums[j], nums[k], nums[l]}) |
191 | | - k++ |
192 | | - l-- |
193 | | - for k < n && nums[k] == nums[k-1] { |
194 | | - k++ |
| 180 | + for i := 0; i < n; i++ { |
| 181 | + for j := i + 1; j < n; j++ { |
| 182 | + for l, r := j+1, n-1; l < r; { |
| 183 | + if nums[i]+nums[j]+nums[l]+nums[r] == target { |
| 184 | + ans = append(ans, []int{nums[i], nums[j], nums[l], nums[r]}) |
| 185 | + l, r = l+1, r-1 |
| 186 | + for l < r && nums[l] == nums[l-1] { |
| 187 | + l++ |
195 | 188 | }
|
196 | | - for l > j && nums[l] == nums[l+1] { |
197 | | - l-- |
| 189 | + for l < r && nums[r] == nums[r+1] { |
| 190 | + r-- |
198 | 191 | }
|
199 | | - } else if nums[i]+nums[j]+nums[k]+nums[l] < target { |
200 | | - k++ |
| 192 | + } else if nums[i]+nums[j]+nums[l]+nums[r] < target { |
| 193 | + l++ |
201 | 194 | } else {
|
202 | | - l-- |
| 195 | + r-- |
203 | 196 | }
|
204 | 197 | }
|
| 198 | + for j+1 < n && nums[j+1] == nums[j] { |
| 199 | + j++ |
| 200 | + } |
| 201 | + } |
| 202 | + for i+1 < n && nums[i+1] == nums[i] { |
| 203 | + i++ |
205 | 204 | }
|
206 | 205 | }
|
207 | | - return res |
| 206 | + return ans |
208 | 207 | }
|
209 | 208 | ```
|
210 | 209 |
|
|
0 commit comments