What is the main idea behind the Binary Search on Answer Technique?
It is a method where we use binary search not on a sorted array, but on the range of possible answers to find the correct answer efficiently.
Click to reveal answer
beginner
In Binary Search on Answer, what do we need to define before starting the search?
We need to define the search space, which is the range of possible answers, and a condition function that tells if a candidate answer is valid or not.
Click to reveal answer
intermediate
Why is Binary Search on Answer useful for optimization problems?
Because it helps find the best possible answer (like minimum or maximum) by checking feasibility within a range, reducing the problem from linear to logarithmic time.
Click to reveal answer
beginner
What is the role of the condition function in Binary Search on Answer?
It checks if a given candidate answer meets the problem's requirements, guiding the binary search to move left or right in the search space.
Click to reveal answer
intermediate
Give an example problem where Binary Search on Answer is applicable.
Finding the maximum minimum distance to place k elements in an array, such as placing wifi routers in houses to maximize minimum distance between them.
Click to reveal answer
What does Binary Search on Answer search over?
AUnsorted data
BA sorted array
CThe range of possible answers
DA linked list
✗ Incorrect
Binary Search on Answer searches over the range of possible answers, not over a sorted array.
What must the condition function return in Binary Search on Answer?
ATrue if candidate answer is valid, False otherwise
BThe size of the input
CThe midpoint of the search space
DThe exact answer
✗ Incorrect
The condition function returns True if the candidate answer is valid, guiding the binary search.
If the condition function returns True for a candidate answer, what should the binary search do next?
ARestart the search
BSearch the left half (smaller answers)
CStop immediately
DSearch the right half (larger answers)
✗ Incorrect
If the candidate answer is valid, binary search tries to find a better (larger) answer by searching the right half.
Which of these problems is a good fit for Binary Search on Answer?
ASorting an array
BFinding the maximum minimum distance for placing items
CFinding the sum of array elements
DReversing a string
✗ Incorrect
Finding maximum minimum distance is an optimization problem suited for Binary Search on Answer.
What is the time complexity benefit of using Binary Search on Answer?
AReduces linear search to logarithmic search over answer space
BIncreases complexity
CNo change in complexity
DMakes it constant time
✗ Incorrect
It reduces the search from linear to logarithmic time over the range of possible answers.
Explain how Binary Search on Answer works step-by-step.
Think about searching over answers, not data.
You got /5 concepts.
Describe a real-life scenario where Binary Search on Answer can be applied and how.
Consider placing wifi routers or cutting wood pieces.
You got /4 concepts.
Practice
(1/5)
1. What is the main idea behind the Binary Search on Answer technique?
easy
A. Searching for the answer by repeatedly dividing the search space based on feasibility
B. Sorting the array before applying binary search
C. Using binary search only on sorted arrays
D. Applying binary search to find the maximum element in an array
Solution
Step 1: Understand the problem context
Binary Search on Answer is used when the answer lies within a range and we can check feasibility for a candidate answer.
Step 2: Explain the technique
We repeatedly pick a middle value in the answer range and check if it satisfies the problem's conditions, then narrow the range accordingly.
Final Answer:
Searching for the answer by repeatedly dividing the search space based on feasibility -> Option A
Quick Check:
Binary Search on Answer = Divide and check feasibility [OK]
Hint: Think of answer range, not array elements, for binary search [OK]
Common Mistakes:
Confusing it with normal binary search on arrays
Trying to apply without a feasibility check
Assuming answer must be in the input array
2. Which of the following is the correct syntax to start a binary search on answer in C for an integer answer between low and high?
easy
A. for (int mid = low; mid <= high; mid++) { /* check feasibility */ }
B. do { mid = (low + high) / 2; /* check feasibility */ } while (low < high);
C. if (low < high) { mid = (low + high) / 2; /* check feasibility */ }
D. while (low <= high) { int mid = (low + high) / 2; /* check feasibility */ }
Solution
Step 1: Identify the binary search loop structure
Binary search uses a while loop with condition low <= high to narrow the search space.
Step 2: Confirm calculation of mid and feasibility check
Mid is calculated as (low + high) / 2 inside the loop, then feasibility is checked to adjust low or high.
Final Answer:
while (low <= high) { int mid = (low + high) / 2; /* check feasibility */ } -> Option D
Quick Check:
Binary search loop = while(low <= high) [OK]
Hint: Use while loop with low <= high for binary search [OK]
Common Mistakes:
Using for loop instead of while
Incorrect loop condition like low < high
Not updating low or high inside loop
3. Consider the following C code snippet using binary search on answer to find the minimum maximum load to split an array into m subarrays:
int canSplit(int* arr, int n, int m, int maxLoad) {
int count = 1, currentSum = 0;
for (int i = 0; i < n; i++) {
if (arr[i] > maxLoad) return 0;
if (currentSum + arr[i] > maxLoad) {
count++;
currentSum = arr[i];
} else {
currentSum += arr[i];
}
}
return count <= m;
}
int binarySearchAnswer(int* arr, int n, int m) {
int low = 0, high = 0;
for (int i = 0; i < n; i++) high += arr[i];
int ans = high;
while (low <= high) {
int mid = (low + high) / 2;
if (canSplit(arr, n, m, mid)) {
ans = mid;
high = mid - 1;
} else {
low = mid + 1;
}
}
return ans;
}
int main() {
int arr[] = {7, 2, 5, 10, 8};
int n = 5, m = 2;
printf("%d", binarySearchAnswer(arr, n, m));
return 0;
}
What is the output of this program?
medium
A. 18
B. 15
C. 20
D. 10
Solution
Step 1: Understand the problem and code logic
The code finds the minimum maximum load to split the array into 2 subarrays so that the largest sum among subarrays is minimized.
Step 2: Dry run with given array
Possible splits:
- [7,2,5] and [10,8] max sums 14 and 18 -> max 18
- [7,2] and [5,10,8] max sums 9 and 23 -> max 23
- [7] and [2,5,10,8] max sums 7 and 25 -> max 25
Minimum max load is 18.
Final Answer:
18 -> Option A
Quick Check:
Minimum max load = 18 [OK]
Hint: Check feasibility by simulating splits, pick minimal max sum [OK]
Common Mistakes:
Choosing sum of all elements as answer
Not considering feasibility function logic
Confusing minimum max load with total sum
4. The following code tries to find the minimum maximum time to complete tasks by binary searching on answer. Identify the bug:
int canComplete(int* tasks, int n, int m, int maxTime) {
int count = 1, currentTime = 0;
for (int i = 0; i < n; i++) {
if (tasks[i] > maxTime) return 0;
if (currentTime + tasks[i] >= maxTime) {
count++;
currentTime = tasks[i];
} else {
currentTime += tasks[i];
}
}
return count <= m;
}
medium
A. The count variable should start from 0, not 1
B. The condition should be currentTime + tasks[i] > maxTime, not >= maxTime
C. The function should return count >= m instead of count <= m
D. The loop should run from i = 1 instead of i = 0
Solution
Step 1: Analyze the feasibility condition
The condition currentTime + tasks[i] >= maxTime causes a new segment even when sum equals maxTime, which is incorrect.
Step 2: Correct the condition
It should be currentTime + tasks[i] > maxTime to start a new segment only when sum exceeds maxTime.
Final Answer:
The condition should be currentTime + tasks[i] > maxTime, not >= maxTime -> Option B
Quick Check:
Use > for splitting condition, not >= [OK]
Hint: Use strict greater than (>) to split segments [OK]
Common Mistakes:
Using >= causes extra segments
Starting count from 0 instead of 1
Returning wrong comparison for count and m
5. You want to find the minimum maximum height to cut trees so that the total wood collected is at least m units. Given an array trees[] of heights, which approach correctly applies binary search on answer to solve this problem?
hard
A. Set low = min height, high = max height; check if sum of all trees is >= m; adjust low or high accordingly
B. Sort trees, then binary search for the tree with height closest to m
C. Set low = 0, high = max height in trees; check if cutting at mid yields enough wood; adjust low or high accordingly
D. Use binary search on the array indices to find the tree that yields maximum wood
Solution
Step 1: Define the search space for cutting height
The cutting height can vary from 0 to the tallest tree height.
Step 2: Check feasibility by summing wood collected at mid height
For a candidate mid, sum wood = sum of (tree height - mid) if positive; check if sum >= m.
Step 3: Adjust search space based on feasibility
If enough wood is collected, try higher cut (low = mid + 1) to minimize cut height; else lower cut (high = mid - 1).
Final Answer:
Set low = 0, high = max height in trees; check if cutting at mid yields enough wood; adjust low or high accordingly -> Option C
Quick Check:
Binary search on cut height range with feasibility check [OK]
Hint: Binary search on cutting height, not on tree indices [OK]
Common Mistakes:
Binary searching on sorted array instead of answer range
Using sum of all trees without cutting logic
Confusing indices with answer values
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.