Discover how a simple sorting trick can save trains from waiting and chaos!
Why Minimum Number of Platforms in DSA Go?
Imagine a busy train station where many trains arrive and depart at different times. You want to park all trains without any waiting, but you only have a few platforms. If you try to manage this by writing down each train's arrival and departure times on paper and checking overlaps manually, it becomes very confusing and slow.
Manually checking each train's schedule to find overlapping times is slow and error-prone. You might miss some overlaps or waste platforms by not organizing the schedule well. This can cause trains to wait or block each other, leading to delays and frustration.
The "Minimum Number of Platforms" concept helps you quickly find the smallest number of platforms needed so that no train has to wait. It uses a smart way to compare arrival and departure times, counting overlaps efficiently without checking every pair manually.
max_platforms := 0 for i := 0; i < n; i++ { count := 1 for j := 0; j < n; j++ { if i != j && trains[i].arrival < trains[j].departure && trains[j].arrival < trains[i].departure { count++ } } if count > max_platforms { max_platforms = count } }
sort.Ints(arrivals) sort.Ints(departures) platforms := 0 max_platforms := 0 i := 0 j := 0 for i < n && j < n { if arrivals[i] <= departures[j] { platforms++ if platforms > max_platforms { max_platforms = platforms } i++ } else { platforms-- j++ } }
This concept enables efficient scheduling so that trains never wait, saving time and resources at busy stations.
Railway stations use this method to decide how many platforms to build, ensuring smooth train arrivals and departures without delays.
Manual checking of train overlaps is slow and error-prone.
Sorting arrival and departure times helps count overlaps efficiently.
Minimum platforms needed equals the maximum number of overlapping trains.
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 requirement
We must find the minimum number of platforms so that all trains can be accommodated without delay.Final Answer:
The least number of platforms needed so no train waits -> Option DQuick Check:
Minimum platforms = no waiting trains [OK]
- Confusing total trains with platforms needed
- Ignoring overlapping arrival and departure times
- Thinking about train durations instead of platform count
Solution
Step 1: Recall Go slice syntax
In Go, slices are declared with []int{values}, not with parentheses or braces alone.Step 2: Match correct syntax
arrivals := []int{900, 940, 950}; departures := []int{910, 1200, 1120} uses []int{...} which is correct; others use invalid syntax.Final Answer:
arrivals := []int{900, 940, 950}; departures := []int{910, 1200, 1120} -> Option BQuick Check:
Go slices use []int{...} [OK]
- Using parentheses () instead of braces {}
- Using braces {} without []int type
- Confusing arrays and slices syntax
[900, 940, 950, 1100, 1500, 1800] and departure times [910, 1200, 1120, 1130, 1900, 2000]?Solution
Step 1: Sort arrival and departure times
Arrivals: 900, 940, 950, 1100, 1500, 1800; Departures: 910, 1120, 1130, 1200, 1900, 2000.Step 2: Count overlapping trains
Between 940 and 1120, three trains overlap (940, 950, 1100 arrivals with departures after 940). So minimum platforms = 3.Final Answer:
3 -> Option AQuick Check:
Max overlap = 3 trains [OK]
- Not sorting times before counting
- Counting total trains instead of overlaps
- Mixing arrival and departure times
arrivals := []int{900, 940, 950}
departures := []int{910, 1200, 1120}
i, j, platforms := 0, 0, 0
for i < len(arrivals) && j < len(departures) {
if arrivals[i] <= departures[j] {
platforms++
i++
} else {
platforms--
j++
}
}
fmt.Println(platforms)Solution
Step 1: Understand platform counting logic
When arrival time equals departure time, we should consider the train has left before the next arrives to avoid extra platform count.Step 2: Fix comparison operator
Using <= causes increment even when arrival equals departure, inflating platform count. Changing to < fixes this.Final Answer:
The comparison should be arrivals[i] < departures[j], not <= -> Option CQuick Check:
Use < to avoid counting simultaneous arrival/departure as overlap [OK]
- Using <= instead of < in time comparison
- Incorrect loop termination conditions
- Wrong initialization of platform count
[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: Track platform count and max count during iteration
While iterating sorted arrivals and departures, keep updating current platform count and record when it reaches a new maximum.Step 2: Record time intervals for max platforms
Store the start time when max platforms count is reached and end time when it decreases, to get intervals.Final Answer:
Track intervals when platform count reaches max during iteration -> Option AQuick Check:
Record max platform count intervals while counting platforms [OK]
- Ignoring departure times when tracking intervals
- Only sorting arrivals without departures
- Using total trains count instead of overlaps
Ready to prove it?
Pass the test and this pattern moves unknown
