Allocate Minimum Pages using Binary Search on Answer
📖 Scenario: You are managing a library where books are arranged in a row. Each book has a certain number of pages. You want to allocate these books to a fixed number of students such that each student gets a continuous sequence of books. Your goal is to minimize the maximum number of pages assigned to any student.This is a common problem in resource allocation where fairness and balance are important.
🎯 Goal: Build a TypeScript program that uses binary search on the answer to find the minimum possible maximum pages allocated to a student.You will create the data structure for books, set the number of students, implement the binary search logic, and finally print the minimum maximum pages.
📋 What You'll Learn
Create an array called books with the exact values [12, 34, 67, 90]
Create a variable called students and set it to 2
Write a function called isPossible that takes mid as input and returns true if allocation is possible with max pages <= mid, else false
Use binary search between the max pages of a single book and the sum of all pages to find the minimum max pages
Print the final minimum maximum pages using console.log
💡 Why This Matters
🌍 Real World
This problem models fair resource allocation such as dividing tasks, workloads, or resources among people or machines to balance load.
💼 Career
Understanding binary search on answer is useful in software engineering roles involving optimization, scheduling, and system design.
Progress0 / 4 steps
1
Create the books array
Create an array called books with the exact values [12, 34, 67, 90]
DSA Typescript
Hint
Use const books: number[] = [12, 34, 67, 90]; to create the array.
2
Set the number of students
Create a variable called students and set it to 2
DSA Typescript
Hint
Use const students: number = 2; to set the number of students.
3
Implement the isPossible function
Write a function called isPossible that takes a number mid and returns true if it is possible to allocate books to students such that no student reads more than mid pages, otherwise returns false
DSA Typescript
Hint
Check if each book can be allocated without exceeding mid pages per student. Increase student count when needed.
4
Use binary search to find minimum maximum pages and print result
Use binary search between maxPages (maximum pages in a single book) and totalPages (sum of all pages) to find the minimum maximum pages. Print the result using console.log
DSA Typescript
Hint
Use binary search between the max single book pages and total pages. Update the result when allocation is possible.
Practice
(1/5)
1. What is the main goal of the Allocate Minimum Pages problem using binary search on answer?
easy
A. To assign pages randomly among students
B. To maximize the total number of pages assigned
C. To find the average number of pages per student
D. To minimize the maximum number of pages assigned to a student
Solution
Step 1: Understand the problem objective
The problem asks to allocate books to students such that the maximum pages assigned to any student is minimized.
Step 2: Identify the binary search approach
We use binary search on the range of possible maximum pages to find the minimum feasible maximum.
Final Answer:
To minimize the maximum number of pages assigned to a student -> Option D
Quick Check:
Goal = minimize max pages [OK]
Hint: Minimize max pages per student using binary search [OK]
Common Mistakes:
Trying to maximize pages instead of minimizing
Ignoring the maximum pages constraint
Confusing total pages with max pages per student
2. Which of the following is the correct TypeScript syntax to declare the binary search boundaries for the Allocate Minimum Pages problem given an array pages?
easy
A. let low = pages.length; let high = Math.max(...pages);
B. let low = Math.min(...pages); let high = pages.length;
C. let low = 0; let high = pages.reduce((a, b) => a + b, 0);
D. let low = 0; let high = Math.min(...pages);
Solution
Step 1: Determine low and high boundaries
Low is minimum possible max pages (0 or max single book pages), high is sum of all pages (max total pages).
Step 2: Check correct syntax for sum
Using reduce sums all pages correctly for high boundary.
Final Answer:
let low = 0; let high = pages.reduce((a, b) => a + b, 0); -> Option C
Quick Check:
low = 0, high = sum pages [OK]
Hint: Sum array for high, zero or max page for low [OK]
Common Mistakes:
Setting low as pages.length instead of page count
Using min pages as high boundary
Incorrect sum calculation syntax
3. Consider the following TypeScript code snippet for checking feasibility in Allocate Minimum Pages problem:
function isPossible(pages: number[], students: number, maxPages: number): boolean {
let requiredStudents = 1;
let currentSum = 0;
for (let page of pages) {
if (page > maxPages) return false;
if (currentSum + page > maxPages) {
requiredStudents++;
currentSum = page;
} else {
currentSum += page;
}
}
return requiredStudents <= students;
}
What is the output of isPossible([10, 20, 30, 40], 2, 50)?
medium
A. false
B. SyntaxError
C. true
D. RuntimeError
Solution
Step 1: Trace allocation with maxPages = 50
Assign pages: 10+20=30 (still <=50), add 30 would exceed 50, so new student starts with 30, then 40 exceeds 50 if added, so new student starts with 40.
Step 2: Count required students
We used 3 students but only 2 allowed, so requiredStudents=3 > 2 means return false. But check carefully: 10+20=30, next 30 alone fits in second student, 40 alone needs third student.
Final Answer:
false -> Option A
Quick Check:
Required students = 3 > 2, so false [OK]
Hint: Count students needed, compare with allowed [OK]
Common Mistakes:
Ignoring that a single book can exceed maxPages
Miscounting students when sum exceeds maxPages
Assuming sum of all pages fits in one student
4. The following TypeScript function attempts to find the minimum maximum pages but has a bug. Identify the bug.
function findMinPages(pages: number[], students: number): number {
let low = Math.min(...pages);
let high = pages.reduce((a, b) => a + b, 0);
let result = high;
while (low <= high) {
let mid = Math.floor((low + high) / 2);
if (isPossible(pages, students, mid)) {
result = mid;
high = mid - 1;
} else {
low = mid + 1;
}
}
return result;
}
medium
A. High should be min page, not sum of pages
B. Low should start from max page, not min page
C. Mid calculation causes infinite loop
D. Result variable is not updated
Solution
Step 1: Analyze low boundary initialization
Low should be the maximum single book pages, because no student can get less than the largest book.
Step 2: Identify impact of wrong low
Starting low at minimum page can cause incorrect feasibility checks and longer search.
Final Answer:
Low should start from max page, not min page -> Option B
Quick Check:
Low = max page [OK]
Hint: Low boundary = max single book pages [OK]
Common Mistakes:
Setting low to min page instead of max page
Confusing high boundary with low
Not updating result inside loop
5. Given books with pages [12, 34, 67, 90] and 3 students, what is the minimum maximum pages allocated to any student using binary search on answer?
hard
A. 90
B. 113
C. 67
D. 34
Solution
Step 1: Set search boundaries
Low = max pages = 90, High = sum pages = 12+34+67+90=203.
Step 2: Binary search feasibility checks
Mid = (90+203)//2=146. Check if possible with maxPages=146: allocate [12+34+67=113] to student1, 90 to student2, only 2 students needed <=3, possible. So high=145.
Step 3: Narrow down to minimum max pages
Continuing: mid=103 possible [12+34=46,67,90] 3 students. mid=96 possible. mid=92 possible. mid=90: [12+34=46], [67], [90] all <=90, 3 students <=3 feasible, high=89. Loop ends with result=90.
Step 4: Re-evaluate minimum max pages
Check if 113 is feasible with 3 students: [12+34+67=113], [90] 2 students needed <=3, so 113 is feasible but not minimum.
Step 5: Check if 90 is feasible
Allocations: [12+34=46], [67], [90] 3 students needed <=3, feasible.
Final Answer:
90 -> Option A
Quick Check:
Minimum max pages = 90 [OK]
Hint: Binary search between max page and sum pages [OK]
Common Mistakes:
Misallocating at max=90 thinking 4 students needed
Miscounting students during allocation
Confusing with 2 students (113)
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.