Содержание

16. 3Sum Closest

Условие задачи

Дан массив целых чисел 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
}