📖 Scenario: Imagine you are organizing a party and want to divide candies equally among children. You have a list of candy packets with different counts. You want to find the maximum number of candies each child can get so that all children get the same amount and no candy is wasted.
🎯 Goal: Build a Java program that uses the binary search on answer technique to find the maximum candies per child that can be distributed equally from given packets.
📋 What You'll Learn
Create an integer array called packets with exact values: 7, 15, 10, 20, 8
Create an integer variable called children and set it to 5
Write a binary search loop using variables low, high, and mid to find the maximum candies per child
Print the final maximum candies per child using System.out.println(maxCandies)
💡 Why This Matters
🌍 Real World
This technique helps solve problems where you guess an answer and check if it fits, like dividing resources evenly or optimizing sizes.
💼 Career
Binary search on answer is a common pattern in coding interviews and real-world optimization problems in software development.
Progress0 / 4 steps
1
Create the candy packets array
Create an integer array called packets with these exact values: 7, 15, 10, 20, 8
DSA Java
Hint
Use int[] packets = {7, 15, 10, 20, 8}; to create the array.
2
Add the number of children variable
Add an integer variable called children and set it to 5 inside the main method after the packets array
DSA Java
Hint
Use int children = 5; to create the variable.
3
Implement binary search on answer to find max candies per child
Write a binary search loop inside the main method using variables low, high, and mid to find the maximum candies per child that can be distributed equally. Use a helper variable maxCandies to store the result. Use a while loop with condition low <= high. Calculate total children served by summing packets[i] / mid for all packets. Update maxCandies when possible.
DSA Java
Hint
Use binary search between 1 and the maximum packet size (20). Calculate total children served by dividing each packet by mid.
4
Print the maximum candies per child
Print the integer variable maxCandies using System.out.println(maxCandies); inside the main method after the binary search loop
DSA Java
Hint
Use System.out.println(maxCandies); to print the result.
Practice
(1/5)
1. What is the main idea behind the Binary Search on Answer technique?
easy
A. We guess an answer and check if it satisfies the problem constraints, then adjust the guess.
B. We sort the array and then apply binary search to find an element.
C. We use binary search to find the maximum element in an unsorted array.
D. We divide the array into two halves and solve each half separately.
Solution
Step 1: Understand the technique's approach
Binary Search on Answer guesses a possible answer and checks if it meets the problem's conditions.
Step 2: Adjust guess based on check
If the guess is valid, we try smaller or larger guesses accordingly to find the best answer.
Final Answer:
We guess an answer and check if it satisfies the problem constraints, then adjust the guess. -> Option A
Quick Check:
Guess and check approach = We guess an answer and check if it satisfies the problem constraints, then adjust the guess. [OK]
Confusing with normal binary search on sorted arrays
Thinking it only finds elements, not answers
Assuming it divides data instead of answer range
2. Which of the following is the correct way to initialize the search range for binary search on answer when finding minimum maximum load among workers?
easy
A. low = 0; high = maximum single load
B. low = minimum load; high = maximum load
C. low = 0; high = sum of all loads
D. low = average load; high = sum of all loads
Solution
Step 1: Define search range for answer
Minimum maximum load can be between 0 and sum of all loads because no worker can have load more than total.
Step 2: Set low and high accordingly
Set low = 0 and high = sum of all loads to cover all possible answers.
Final Answer:
low = 0; high = sum of all loads -> Option C
Quick Check:
Search range covers all loads = low = 0; high = sum of all loads [OK]
Hint: Set low to minimum possible, high to maximum possible answer [OK]
Common Mistakes:
Setting low to minimum load instead of 0
Setting high to max single load instead of sum
Using average load as boundary
3. Consider the following Java code snippet using binary search on answer to find minimum maximum pages assigned to students:
int[] pages = {10, 20, 30, 40};
int low = 40, high = 100;
while (low < high) {
int mid = (low + high) / 2;
if (canAllocate(pages, mid, 2)) {
high = mid;
} else {
low = mid + 1;
}
}
System.out.println(low);
// canAllocate checks if pages can be divided among 2 students with max pages mid
What will be the output?
medium
A. 70
B. 60
C. 90
D. 100
Solution
Step 1: Understand the problem and initial range
Pages array is {10,20,30,40}, low=40 (max single), high=100 (sum). We want minimum max pages for 2 students.
Hint: Check mid feasibility, adjust low/high until low meets high [OK]
Common Mistakes:
Not updating low/high correctly after canAllocate
Misunderstanding canAllocate logic
Incorrect mid calculation or loop condition
4. The following code attempts to find the minimum largest sum of subarrays using binary search on answer. Identify the bug:
int[] nums = {7, 2, 5, 10, 8};
int m = 2;
int low = 0, high = 32;
while (low <= high) {
int mid = (low + high) / 2;
if (canSplit(nums, mid, m)) {
high = mid - 1;
} else {
low = mid + 1;
}
}
System.out.println(low);
// canSplit checks if nums can be split into m subarrays with max sum <= mid
medium
A. The initial low should be max element, not 0
B. The loop condition should be low < high, not low <= high
C. The mid calculation should use (low + high + 1) / 2
D. The canSplit function should return false when sum equals mid
Solution
Step 1: Check initial low value
Low is set to 0, but minimum largest sum can't be less than max element (10).
Step 2: Correct low initialization
Set low = max element (10) to ensure valid search range and avoid infinite loop or wrong answer.
Final Answer:
The initial low should be max element, not 0 -> Option A
Quick Check:
Low must start at max element [OK]
Hint: Start low at max element to avoid invalid guesses [OK]
Common Mistakes:
Starting low at 0 causing invalid mid values
Using wrong loop condition causing infinite loop
Misunderstanding canSplit return values
5. You want to find the minimum time required to complete all jobs by k workers, where each job takes a certain time. Using binary search on answer, which approach correctly finds the answer?
int[] jobs = {3, 6, 7, 11}; int k = 2;
Options:
hard
A. Sort jobs ascending; assign jobs alternately to workers; return max load.
B. Set low = 0, high = max job time; assign jobs greedily without checking mid; return high.
C. Set low = sum of all jobs, high = max job time; use binary search to find minimum sum.
D. Set low = max job time, high = sum of all jobs; check if jobs can be assigned within mid time using k workers; adjust low/high accordingly.
Solution
Step 1: Define search boundaries
Low should be max job time (11), high sum of all jobs (3+6+7+11=27) to cover all possible times.
Step 2: Use binary search with feasibility check
Check if jobs can be assigned to k=2 workers within mid time. Adjust low/high based on feasibility.
Final Answer:
Set low = max job time, high = sum of all jobs; check if jobs can be assigned within mid time using k workers; adjust low/high accordingly. -> Option D
Quick Check:
Binary search on answer with feasibility check = Set low = max job time, high = sum of all jobs; check if jobs can be assigned within mid time using k workers; adjust low/high accordingly. [OK]
Hint: Set low=max job, high=sum; check feasibility; adjust range [OK]
Common Mistakes:
Setting wrong low/high boundaries
Not checking feasibility properly
Assigning jobs without binary search
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.