Magnetic Force Between Two Balls — BS on Minimum Distance

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 322 · Magnetic Force Between Two Balls

Difficulty: Medium · Pattern: BS on Answer (maximize minimum gap)

Place m balls in baskets to maximize the minimum magnetic force (distance) between any two.

Solutions

# Python
def maxDistance(position, m):
    position.sort()
    def feasible(gap):
        count = 1; prev = position[0]
        for p in position[1:]:
            if p - prev >= gap: count += 1; prev = p
        return count >= m

    lo, hi = 1, (position[-1]-position[0])//(m-1)
    while lo < hi:
        mid = (lo+hi+1)//2  # upper mid (maximize)
        if feasible(mid): lo = mid
        else: hi = mid-1
    return lo
// Java
public int maxDistance(int[] position, int m) {
    Arrays.sort(position);
    int lo=1, hi=(position[position.length-1]-position[0])/(m-1);
    while (lo<hi) {
        int mid=lo+(hi-lo+1)/2, cnt=1, prev=position[0];
        for (int p:position) if(p-prev>=mid){cnt++;prev=p;}
        if (cnt>=m) lo=mid; else hi=mid-1;
    }
    return lo;
}

Complexity

  • Time: O(n log(max/m))
  • Space: O(1)

Note

When maximizing, use upper mid (lo+hi+1)//2 and set lo=mid on success.

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro