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 platforms changes as the number of trains increases.
How does the program's work grow when we have more trains arriving and leaving?
Analyze the time complexity of the following code snippet.
// Find minimum platforms needed for trains
int FindPlatforms(int[] arrivals, int[] departures) {
Array.Sort(arrivals);
Array.Sort(departures);
int platformNeeded = 0, maxPlatforms = 0;
int i = 0, j = 0;
while (i < arrivals.Length && j < departures.Length) {
if (arrivals[i] <= departures[j]) {
platformNeeded++;
i++;
if (platformNeeded > maxPlatforms) maxPlatforms = platformNeeded;
} else {
platformNeeded--;
j++;
}
}
return maxPlatforms;
}
This code sorts arrival and departure times, then counts platforms needed by comparing times.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: One while loop that moves through both arrival and departure arrays.
- How many times: Each element in arrivals and departures is visited once, so about 2n steps for n trains.
As the number of trains grows, the sorting and the single loop both take more time.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 log 10 + 20 steps |
| 100 | About 100 log 100 + 200 steps |
| 1000 | About 1000 log 1000 + 2000 steps |
Pattern observation: Sorting grows faster than the loop, so sorting dominates the time.
Time Complexity: O(n log n)
This means the time grows a bit faster than the number of trains because sorting takes more time as input grows.
[X] Wrong: "The time is just O(n) because we only loop once through the arrays."
[OK] Correct: Sorting the arrays before looping takes more time, so the sorting step makes the total time O(n log n), not just O(n).
Understanding how sorting affects the overall time helps you explain your solution clearly and shows you know how to analyze real problems efficiently.
"What if the arrival and departure arrays were already sorted? How would the time complexity change?"
Practice
Solution
Step 1: Understand the problem context
The problem wants to find how many platforms are needed so that no train has to wait for another to leave.Step 2: Identify the key output
The output is the minimum number of platforms required to handle all trains without delay.Final Answer:
The least number of platforms needed so no train waits -> Option BQuick Check:
Minimum platforms = no waiting trains [OK]
- Confusing total trains with platforms needed
- Ignoring overlapping arrival and departure times
- Thinking about train speed or duration instead
Solution
Step 1: Recall C# array declaration syntax
In C#, arrays are declared with type[], and values inside curly braces {}.Step 2: Check each option for correct syntax
int[] arrival = {900, 940, 950}; int[] departure = {910, 1200, 1120}; uses int[] and curly braces {}, which is correct. Others use parentheses or wrong syntax.Final Answer:
int[] arrival = {900, 940, 950}; int[] departure = {910, 1200, 1120}; -> Option CQuick Check:
C# arrays use type[] and {} [OK]
- Using parentheses () instead of curly braces {}
- Declaring arrays without [] after type
- Using square brackets [] for initialization
int[] arrival = {900, 940, 950, 1100, 1500, 1800};
int[] departure = {910, 1200, 1120, 1130, 1900, 2000};
int platforms = CalculateMinPlatforms(arrival, departure);
Console.WriteLine(platforms);
// Assume CalculateMinPlatforms correctly implements the algorithm.Solution
Step 1: Sort arrival and departure times
Arrival: 900, 940, 950, 1100, 1500, 1800 Departure: 910, 1120, 1130, 1200, 1900, 2000Step 2: Count overlapping trains to find max platforms
At 950, trains at 900, 940, 950 overlap (3 trains). Later overlaps are fewer.Final Answer:
3 -> Option DQuick Check:
Max overlap = 3 platforms [OK]
- Not sorting times before counting overlaps
- Counting total trains instead of overlaps
- Mixing arrival and departure arrays
int[] arrival = {900, 940, 950};
int[] departure = {910, 1200, 1120};
Array.Sort(arrival);
Array.Sort(departure);
int i = 0, j = 0, platforms = 0, maxPlatforms = 0;
while (i < arrival.Length && j < departure.Length) {
if (arrival[i] <= departure[j]) {
platforms++;
i++;
} else {
platforms--;
j++;
}
maxPlatforms = Math.Max(maxPlatforms, platforms);
}
Console.WriteLine(maxPlatforms);Solution
Step 1: Analyze the comparison operator in the loop
Using '<=' causes counting a train as arriving exactly when another departs, increasing platforms unnecessarily.Step 2: Correct comparison to '<' to avoid overlap at exact departure time
Changing to '<' means a train arriving at the same time another departs does not increase platform count.Final Answer:
The comparison should be 'arrival[i] < departure[j]' instead of '<=' -> Option AQuick Check:
Use '<' to avoid counting simultaneous arrival and departure as overlap [OK]
- Using '<=' causes overcounting platforms
- Not sorting arrays before processing
- Incorrect loop condition causing missed trains
[900, 940, 950, 1100, 1500, 1800] and departure times [910, 1200, 1120, 1130, 1900, 2000], how would you modify the algorithm to also return the time intervals when the maximum number of platforms are needed?Solution
Step 1: Modify algorithm to track platform count changes
While iterating, record start time when platforms reach max and end time when count drops.Step 2: Store intervals where platform count equals maximum
Keep a list of intervals with max platforms to return after processing all times.Final Answer:
Track intervals when platform count equals max during iteration and store them -> Option AQuick Check:
Record max platform intervals during count updates [OK]
- Ignoring time intervals, returning only counts
- Not updating intervals when platform count changes
- Sorting only one array causing wrong intervals
Ready to prove it?
Pass the test and this pattern moves unknown
