Skip to content

Commit c57f0a8

Browse files
aQuaaQua
aQua
authored and
aQua
committed
adding Problem 18
1 parent 9fe9ee5 commit c57f0a8

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

Algorithms/0018.4sum/4sum.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,48 @@ func fourSum(nums []int, target int) [][]int {
99
sort.Ints(nums)
1010

1111
for i := 0; i < len(nums)-3; i++ {
12+
// 避免添加重复的结果
13+
if i > 1 && nums[i] == nums[i-2] {
14+
continue
15+
}
16+
1217
for j := i + 1; j < len(nums)-2; j++ {
18+
// 避免添加重复的结果
19+
if nums[j] == nums[j-1] {
20+
continue
21+
}
22+
1323
l, r := j+1, len(nums)-1
1424
for l < r {
15-
1625
s := nums[i] + nums[j] + nums[l] + nums[r]
1726
switch {
1827
case s < target:
1928
l++
2029
case s > target:
2130
r--
2231
default:
32+
res = append(res, []int{nums[i], nums[j], nums[l], nums[r]})
33+
l, r = next(nums, l, r)
2334
}
2435
}
2536
}
2637

2738
}
2839
return res
2940
}
41+
42+
func next(nums []int, l, r int) (int, int) {
43+
for l < r {
44+
switch {
45+
case nums[l] == nums[l+1]:
46+
l++
47+
case nums[r] == nums[r-1]:
48+
r--
49+
default:
50+
l++
51+
r--
52+
break
53+
}
54+
}
55+
return l, r
56+
}

Algorithms/0018.4sum/4sum_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,28 @@ func Test_Problem0018(t *testing.T) {
3333
question{
3434
para{[]int{1, 0, -1, 0, -2, 2}, 0},
3535
ans{[][]int{
36+
[]int{-2, -1, 1, 2},
37+
[]int{-2, 0, 0, 2},
3638
[]int{-1, 0, 0, 1},
39+
}},
40+
},
41+
question{
42+
para{[]int{0, 0, 0, 0}, 0},
43+
ans{[][]int{
44+
[]int{0, 0, 0, 0},
45+
}},
46+
},
47+
question{
48+
para{[]int{-1, -1, -2, -2, 1, 1, 2, 2, 0, 0, 0, 0}, 0},
49+
ans{[][]int{
50+
[]int{-2, -2, 2, 2},
3751
[]int{-2, -1, 1, 2},
3852
[]int{-2, 0, 0, 2},
53+
[]int{-2, 0, 1, 1},
54+
[]int{-1, -1, 0, 2},
55+
[]int{-1, -1, 1, 1},
56+
[]int{-1, 0, 0, 1},
57+
[]int{0, 0, 0, 0},
3958
}},
4059
},
4160

0 commit comments

Comments
 (0)