diff --git a/go/magnetic-force-between-two-balls.go b/go/magnetic-force-between-two-balls.go new file mode 100644 index 0000000..95bc635 --- /dev/null +++ b/go/magnetic-force-between-two-balls.go @@ -0,0 +1,41 @@ +package main + +import "slices" + +func maxDistance(position []int, m int) int { + placed := func(distance int) bool { + counter := 1 + + last := position[0] + for _, p := range position { + if p-last >= distance { + counter++ + last = p + } + + if counter >= m { + return true + } + } + + return false + } + + slices.Sort(position) + + low := 1 + high := (position[len(position)-1] - position[0]) / (m - 1) + + foundMax := 1 + for low <= high { + mid := low + (high-low)/2 + if placed(mid) { + foundMax = mid + low = mid + 1 + } else { + high = mid - 1 + } + } + + return foundMax +}