Approach
Depth-first search
For The Number of Passengers in Each Bus II, the implementation follows one branch at a time, making it suitable for components, trees, backtracking, or dependency exploration.
- Define the state carried into one recursive or stack frame.
- Mark or choose the current state before exploring children.
- Combine child results or undo the choice when the branch finishes.
Code notes
- 63 lines of SQL from the credited upstream file 2153.sql.
- The implementation keeps its working state in language-native values and containers.
- No explicit loop blocks detected.
Complexity
Count unique states for graph traversal; for backtracking, count the branching factor and maximum depth.
Check the problem constraints before deciding whether this complexity will pass.
Use this to learn the idea, then write your own version.
1WITH RECURSIVE2 BusesNeighbors AS (3 SELECT4 bus_id,5 arrival_time,6 capacity,7 IFNULL(LAG(arrival_time) OVER(8 ORDER BY arrival_time), 09 ) AS prev_arrival_time10 FROM Buses11 ),12 BusesMetadata AS (13 SELECT14 BusesNeighbors.bus_id,15 BusesNeighbors.arrival_time,16 BusesNeighbors.capacity,17 BusesNeighbors.prev_arrival_time,18 COUNT(Passengers.passenger_id) AS waiting,19 ROW_NUMBER() OVER(20 ORDER BY BusesNeighbors.arrival_time21 ) AS `row_number`22 FROM BusesNeighbors23 LEFT JOIN Passengers24 ON (25 BusesNeighbors.prev_arrival_time < Passengers.arrival_time26 AND Passengers.arrival_time <= BusesNeighbors.arrival_time)27 GROUP BY 1, 2, 328 ),29 Boarding AS (30 SELECT31 BusesMetadata.`row_number`,32 BusesMetadata.bus_id,33 LEAST(34 BusesMetadata.capacity,35 BusesMetadata.waiting36 ) AS boarded,37 GREATEST(38 0,39 BusesMetadata.waiting - BusesMetadata.capacity40 ) AS not_boarded41 FROM BusesMetadata42 WHERE `row_number` = 143 UNION ALL44 SELECT45 BusesMetadata.`row_number`,46 BusesMetadata.bus_id,47 LEAST(48 BusesMetadata.capacity,49 Boarding.not_boarded + BusesMetadata.waiting50 ) AS boarded,51 GREATEST(52 0,53 Boarding.not_boarded + BusesMetadata.waiting - BusesMetadata.capacity54 ) AS not_boarded55 FROM BusesMetadata, Boarding56 WHERE BusesMetadata.`row_number` = Boarding.`row_number` + 157 )58SELECT59 bus_id,60 boarded AS passengers_cnt61FROM Boarding62ORDER BY 1;63