Условие задачи
Дан массив целых чисел nums
и целое число target
. Необходимо найти сумму трех элементов исходного массива, которая наиболее близка к target
и вернуть эту суммуу.
пример 1
1
2
3
|
Input: nums = [-1,2,1,-4], target = 1
Output: 2
Explanation: The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
|
Ограничения
- 3 <=
len(nums)
<= 10^3
- -10^3 <=
nums[i]
<= 10^3
- -10^4 <=
target
<= 10^4
Решение
Brute force
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
func threeSumClosest(nums []int, target int) int {
a:= make(map[int]int,0)
for idx:=range nums {
a[nums[idx]]++
}
closest := math.MaxInt32
ressum := target
for idx := range a {
a[idx]--
for jdx:= range a {
if a[jdx] <= 0 {
continue
}
a[jdx]--
for kdx := range a {
if a[kdx] <= 0 {
continue
}
sum := idx+jdx+kdx
if int(math.Abs(float64(target-sum))) < closest {
ressum = sum
closest = int(math.Abs(float64(target-sum)))
}
}
a[jdx]++
}
a[idx]++
}
return ressum
}
|