Aggressive Cows — Binary Search on Minimum Distance

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 342 · Aggressive Cows (Classic BS on Answer)

Difficulty: Hard · Pattern: BS on Answer (maximize min gap)

Place c cows in n stalls to maximize the minimum distance between any two.

Solutions

# Python
def solve(stalls, c):
    stalls.sort()
    def feasible(gap):
        count = 1; prev = stalls[0]
        for s in stalls[1:]:
            if s - prev >= gap: count += 1; prev = s
        return count >= c

    lo, hi = 1, stalls[-1]-stalls[0]
    while lo < hi:
        mid = lo+(hi-lo+1)//2  # maximize
        if feasible(mid): lo = mid
        else: hi = mid-1
    return lo
// Java
int solve(int[] stalls, int c) {
    Arrays.sort(stalls);
    int lo=1, hi=stalls[stalls.length-1]-stalls[0];
    while (lo<hi) {
        int mid=lo+(hi-lo+1)/2, cnt=1, prev=stalls[0];
        for (int s:stalls) if(s-prev>=mid){cnt++;prev=s;}
        if (cnt>=c) lo=mid; else hi=mid-1;
    }
    return lo;
}

Complexity

  • Time: O(n log(max-min))
  • Space: O(1)

This is Magnetic Force Between Two Balls under a different name — same pattern.

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro