Minimum Number of Platforms in DSA C - Time & Space Complexity
We want to find out how the time needed to find the minimum number of train platforms changes as the number of trains increases.
Specifically, we ask: How does the running time grow when we have more arrival and departure times?
Analyze the time complexity of the following code snippet.
void findPlatforms(int arr[], int dep[], int n) {
sort(arr, arr + n);
sort(dep, dep + n);
int i = 0, j = 0, platforms = 0, maxPlatforms = 0;
while (i < n && j < n) {
if (arr[i] <= dep[j]) {
platforms++;
i++;
if (platforms > maxPlatforms) maxPlatforms = platforms;
} else {
platforms--;
j++;
}
}
}
This code finds the minimum number of platforms needed so that no train waits, by sorting arrival and departure times and then scanning them.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Sorting the arrival and departure arrays, and then scanning both arrays once.
- How many times: Sorting takes multiple comparisons (depends on n), scanning uses a single loop that runs at most 2n times.
Sorting takes more time as the number of trains grows, and scanning grows linearly with the number of trains.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 log 10 + 20 = 50 operations |
| 100 | About 100 log 100 + 200 = 900 operations |
| 1000 | About 1000 log 1000 + 2000 = 13000 operations |
Pattern observation: The sorting dominates and grows faster than scanning, roughly n log n growth.
Time Complexity: O(n log n)
This means the time needed grows a bit faster than the number of trains, mainly because sorting takes more time as trains increase.
[X] Wrong: "The scanning loop alone makes this O(n) time."
[OK] Correct: Sorting the arrays first takes more time than scanning, so the total time is not just linear but includes sorting time.
Understanding this time complexity helps you explain how sorting and scanning work together efficiently to solve real scheduling problems.
"What if the arrival and departure arrays were already sorted? How would the time complexity change?"
Practice
Solution
Step 1: Understand the problem goal
The problem asks for the minimum number of platforms required so that no train has to wait for another to leave.Step 2: Clarify what is being counted
We count how many trains overlap in time, which determines how many platforms are needed simultaneously.Final Answer:
The minimum number of platforms needed so no train waits -> Option BQuick Check:
Minimum platforms = max trains overlapping [OK]
- Confusing total trains with platforms needed
- Ignoring overlapping times
- Counting only arrivals or departures
Solution
Step 1: Check array declaration syntax in C
Arrays must be declared with size or empty brackets and initialized with curly braces {}.Step 2: Validate each option
int arrival[5] = {900, 940, 950, 1100, 1500}; int departure[5] = {910, 1200, 1120, 1130, 1900}; uses correct syntax with size and braces. Others use incorrect syntax like parentheses or missing braces.Final Answer:
int arrival[5] = {900, 940, 950, 1100, 1500}; int departure[5] = {910, 1200, 1120, 1130, 1900}; -> Option AQuick Check:
Arrays use {} with size or empty brackets [OK]
- Using parentheses () instead of braces {}
- Missing array size or empty brackets
- Assigning values without braces
int arrival[] = {900, 940, 950, 1100, 1500};
int departure[] = {910, 1200, 1120, 1130, 1900};
int n = 5;
// Assume arrays are sorted
int i = 1, j = 0, platforms = 1, result = 1;
while (i < n && j < n) {
if (arrival[i] <= departure[j]) {
platforms++;
i++;
if (platforms > result) result = platforms;
} else {
platforms--;
j++;
}
}
printf("%d", result);Solution
Step 1: Trace the platform count with given times
Starts platforms=1 (900 arrival), i=1, j=0. 940 <= 910? No, so platforms--, j=1. Then 940 <= 1200: platforms++, i=2. 950 <= 1200: platforms++, i=3. 1100 <= 1200: platforms++, i=4 (max=3). Later departures reduce platforms.Step 2: Find max platforms during iteration
Maximum platforms reached is 3 (trains 940-1200, 950-1120, 1100-1130 overlap).Final Answer:
3 -> Option DQuick Check:
Max overlapping trains = 3 [OK]
- Not sorting arrival and departure arrays
- Incorrectly incrementing or decrementing platform count
- Confusing <= with < in comparisons
int arrival[] = {900, 940, 950, 1100, 1500};
int departure[] = {910, 1200, 1120, 1130, 1900};
int n = 5;
int i = 0, j = 0, platforms = 0, result = 0;
while (i < n && j < n) {
if (arrival[i] < departure[j]) {
platforms++;
i++;
if (platforms > result) result = platforms;
} else {
platforms--;
j++;
}
}
printf("%d", result);Solution
Step 1: Verify initialization and first steps
platforms=0, i=0, j=0 correct. 900 < 910: platforms=1, i=1, result=1.Step 2: Check logic and trace
940 < 910? No: platforms=0, j=1. Then 940 < 1200: platforms=1, i=2; 950<1200:2, i=3; 1100<1200:3, i=4 (max=3). Continues correctly. < handles equal times optimally.Final Answer:
No error, code is correct -> Option AQuick Check:
Code outputs 3, matching overlaps [OK]
- Using arrival[i] <= departure[j] (overcounts on equal times)
- Initializing platforms=1 with i=0 (overcounts first arrival)
- Loop i <= n && j <= n (off-by-one)
Solution
Step 1: Understand impact of equal arrival and departure times
If a train departs at the same time another arrives, the platform can be reused without adding a new one.Step 2: Adjust comparison logic
When arrival[i] == departure[j], count departure first to free platform before arrival increments platform count.Final Answer:
Treat arrival[i] == departure[j] as departure first to free platform -> Option CQuick Check:
Departure before arrival frees platform [OK]
- Counting arrival before departure causing extra platform
- Ignoring equal times leading to wrong count
- Adding platforms unnecessarily
Ready to prove it?
Pass the test and this pattern moves unknown
