Bird
Raised Fist0
DSA Goprogramming~20 mins

Aggressive Cows Maximum Minimum Distance in DSA Go - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Aggressive Cows Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of maximum minimum distance calculation
What is the output of the following Go code that calculates the maximum minimum distance to place 3 cows in given stalls?
DSA Go
package main
import (
	"fmt"
	"sort"
)

func canPlaceCows(stalls []int, cows int, dist int) bool {
	count := 1
	lastPos := stalls[0]
	for i := 1; i < len(stalls); i++ {
		if stalls[i]-lastPos >= dist {
			count++
			lastPos = stalls[i]
			if count == cows {
				return true
			}
		}
	}
	return false
}

func maxMinDistance(stalls []int, cows int) int {
	sort.Ints(stalls)
	low, high := 0, stalls[len(stalls)-1]-stalls[0]
	result := 0
	for low <= high {
		mid := (low + high) / 2
		if canPlaceCows(stalls, cows, mid) {
			result = mid
			low = mid + 1
		} else {
			high = mid - 1
		}
	}
	return result
}

func main() {
	stalls := []int{1, 2, 8, 4, 9}
	cows := 3
	fmt.Println(maxMinDistance(stalls, cows))
}
A2
B3
C5
D4
Attempts:
2 left
💡 Hint
Think about placing cows with the largest minimum gap possible using binary search.
🧠 Conceptual
intermediate
1:30remaining
Understanding the role of sorting in Aggressive Cows problem
Why is it necessary to sort the stall positions before applying the binary search approach in the Aggressive Cows problem?
ATo ensure the stalls are in increasing order so we can check distances between adjacent stalls correctly
BSorting is not necessary; the algorithm works without sorting
CTo group stalls with the same position together
DTo find the maximum stall position easily
Attempts:
2 left
💡 Hint
Think about how distances between stalls are calculated.
🔧 Debug
advanced
2:00remaining
Identify the bug causing incorrect output
The following Go code attempts to solve the Aggressive Cows problem but returns 2 instead of the correct answer 3. What is the bug?
DSA Go
func canPlaceCows(stalls []int, cows int, dist int) bool {
	count := 1
	lastPos := stalls[0]
	for i := 1; i < len(stalls); i++ {
		if stalls[i]-lastPos > dist {
			count++
			lastPos = stalls[i]
			if count == cows {
				return true
			}
		}
	}
	return false
}
AThe lastPos should be initialized to stalls[len(stalls)-1]
BThe count should start from 0 instead of 1
CThe condition should be stalls[i]-lastPos >= dist instead of > dist
DThe loop should start from i = 0 instead of i = 1
Attempts:
2 left
💡 Hint
Check the condition that decides if a cow can be placed at a stall.
❓ Predict Output
advanced
2:00remaining
Output of maximum minimum distance with larger input
What is the output of the following Go code that calculates the maximum minimum distance to place 4 cows in given stalls?
DSA Go
package main
import (
	"fmt"
	"sort"
)

func canPlaceCows(stalls []int, cows int, dist int) bool {
	count := 1
	lastPos := stalls[0]
	for i := 1; i < len(stalls); i++ {
		if stalls[i]-lastPos >= dist {
			count++
			lastPos = stalls[i]
			if count == cows {
				return true
			}
		}
	}
	return false
}

func maxMinDistance(stalls []int, cows int) int {
	sort.Ints(stalls)
	low, high := 0, stalls[len(stalls)-1]-stalls[0]
	result := 0
	for low <= high {
		mid := (low + high) / 2
		if canPlaceCows(stalls, cows, mid) {
			result = mid
			low = mid + 1
		} else {
			high = mid - 1
		}
	}
	return result
}

func main() {
	stalls := []int{1, 2, 4, 8, 9, 12, 16}
	cows := 4
	fmt.Println(maxMinDistance(stalls, cows))
}
A5
B7
C6
D4
Attempts:
2 left
💡 Hint
Try placing cows with increasing minimum distances and check feasibility.
🧠 Conceptual
expert
2:30remaining
Why binary search is suitable for Aggressive Cows problem?
Why is binary search an efficient approach to find the maximum minimum distance in the Aggressive Cows problem?
ABecause the problem can be transformed into a decision problem where feasibility of a distance can be checked in linear time
BBecause sorting the stalls automatically gives the answer without further checks
CBecause the number of cows is always small, so binary search is faster
DBecause binary search directly finds the exact stall positions for cows
Attempts:
2 left
💡 Hint
Think about how binary search narrows down the search space using a yes/no check.

Practice

(1/5)
1. What is the main goal of the Aggressive Cows Maximum Minimum Distance problem?
easy
A. To arrange cows in increasing order of their stall numbers
B. To find the maximum number of cows that can fit in a single stall
C. To minimize the distance between all cows placed in the stalls
D. To place cows in stalls so that the minimum distance between any two cows is as large as possible

Solution

  1. Step 1: Understand the problem objective

    The problem asks to place cows in given stalls such that the smallest distance between any two cows is as large as possible.
  2. Step 2: Clarify the goal

    This means maximizing the minimum distance between cows, not minimizing or counting cows in one stall.
  3. Final Answer:

    To place cows in stalls so that the minimum distance between any two cows is as large as possible -> Option D
  4. Quick Check:

    Maximize minimum distance = Place cows far apart [OK]
Hint: Focus on maximizing the smallest gap between cows [OK]
Common Mistakes:
  • Thinking the goal is to minimize distance
  • Confusing number of cows with distance
  • Assuming cows can share stalls
2. Which of the following Go function signatures correctly represents the binary search helper function used in the Aggressive Cows problem?
easy
A. func canPlaceCows(stalls []int, dist int) bool
B. func canPlaceCows(cows int, dist int, stalls []int) int
C. func canPlaceCows(stalls []int, cows int, dist int) bool
D. func canPlaceCows(stalls []int, cows int) int

Solution

  1. Step 1: Identify required parameters

    The helper function needs stalls array, number of cows, and distance to check feasibility.
  2. Step 2: Match correct signature

    func canPlaceCows(stalls []int, cows int, dist int) bool has all parameters in correct order and returns bool indicating if placement is possible.
  3. Final Answer:

    func canPlaceCows(stalls []int, cows int, dist int) bool -> Option C
  4. Quick Check:

    Parameters: stalls, cows, dist; returns bool [OK]
Hint: Helper checks feasibility, needs stalls, cows, distance [OK]
Common Mistakes:
  • Wrong parameter order
  • Missing cows or distance parameter
  • Returning int instead of bool
3. Given stalls at positions [1, 2, 8, 4, 9] and 3 cows, what is the maximum minimum distance between any two cows after running the Aggressive Cows algorithm?
medium
A. 3
B. 4
C. 5
D. 2

Solution

  1. Step 1: Sort stalls and set search range

    Sorted stalls: [1, 2, 4, 8, 9]. Minimum distance = 1, maximum = 8 (9-1).
  2. Step 2: Binary search for max minimum distance

    Check mid=4: place first at 1 (last=1), skip 2 (1<4), skip 4 (3<4), place 8 (7>=4, count=2, last=8), skip 9 (1<4). Only 2 cows, fail.
  3. Step 3: Check mid=3

    Place first at 1 (last=1), skip 2 (1<3), place 4 (3>=3, count=2, last=4), place 8 (4>=3, count=3, last=8), skip 9 (1<3). 3 cows placed, success.
  4. Step 4: Final answer

    Maximum minimum distance is 3 (e.g., 1,4,8).
  5. Final Answer:

    3 -> Option A
  6. Quick Check:

    Max min distance = 3 [OK]
Hint: Sort stalls, binary search distance, check feasibility [OK]
Common Mistakes:
  • Not sorting stalls before processing
  • Incorrect binary search mid calculation
  • Miscounting cows placed at given distance
4. Consider this Go snippet for checking if cows can be placed:
func canPlaceCows(stalls []int, cows int, dist int) bool {
    count := 1
    lastPos := stalls[0]
    for i := 1; i < len(stalls); i++ {
        if stalls[i]-lastPos >= dist {
            count++
            lastPos = stalls[i]
        }
    }
    return count >= cows
}

What is the bug if stalls array is not sorted before calling this function?
medium
A. The function may incorrectly count placements because stalls are unordered
B. The function will cause a runtime panic due to index out of range
C. The function will always return false
D. No bug; sorting is not required

Solution

  1. Step 1: Understand function logic

    The function assumes stalls are sorted to place cows greedily at increasing positions.
  2. Step 2: Effect of unsorted stalls

    If stalls are unordered, distance checks become invalid, causing wrong count of cows placed.
  3. Final Answer:

    The function may incorrectly count placements because stalls are unordered -> Option A
  4. Quick Check:

    Unsorted stalls break greedy placement logic [OK]
Hint: Always sort stalls before placement check [OK]
Common Mistakes:
  • Ignoring sorting requirement
  • Assuming function panics without sorting
  • Thinking function always fails without sorting
5. You have stalls at positions [5, 10, 15, 20, 25, 30] and need to place 4 cows. If the minimum distance between cows must be at least 7, which is the correct maximum minimum distance achievable?
hard
A. 7
B. 5
C. 15
D. 10

Solution

  1. Step 1: Analyze stall positions

    Stalls: [5,10,15,20,25,30] (spaced by 5), 4 cows.
  2. Step 2: Check dist=10

    Greedy: place at 5 (last=5), skip 10 (5<10), place 15 (10>=10), skip 20 (5<10), place 25 (10>=10), skip 30 (5<10). 3 cows placed, fail.
  3. Step 3: Check dist=7

    Greedy: place at 5 (last=5), skip 10 (5<7), place 15 (10>=7), skip 20 (5<7), place 25 (10>=7), place 30 (5>=7? No, 5<7), so only 3 cows placed, fail.
  4. Step 4: Check dist=6

    Similar to above, 3 cows placed, fail.
  5. Step 5: Check dist=5

    Greedy: place at 5, 10, 15, 20 (all distances >=5), 4 cows placed, success.
  6. Step 6: Final answer

    Maximum minimum distance is 5, since 7 or more fails to place 4 cows.
  7. Final Answer:

    5 -> Option B
  8. Quick Check:

    Max min distance = 5 [OK]
Hint: Test distances with binary search and feasibility check [OK]
Common Mistakes:
  • Assuming max distance is stall range without checks
  • Ignoring minimum distance constraint
  • Misplacing cows ignoring stall positions
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard