Skip to main content
Back to problems
#2142
Medium Database

The number of passengers in each bus i

Database
49.1% acceptance
Mar 31, 2026
117
12

No description available.

Solution

Pandas
Time O(n)
Space O(1)
LeetCode
solution.pandas
# Table: Buses
# 
# +--------------+------+
# | Column Name  | Type |
# +--------------+------+
# | bus_id       | int  |
# | arrival_time | int  |
# +--------------+------+
# bus_id is the column with unique values for this table.
# Each row of this table contains information about the arrival time of a bus at the LeetCode station.
# No two buses will arrive at the same time.
# 
#  
# 
# Table: Passengers
# 
# +--------------+------+
# | Column Name  | Type |
# +--------------+------+
# | passenger_id | int  |
# | arrival_time | int  |
# +--------------+------+
# passenger_id is the column with unique values for this table.
# Each row of this table contains information about the arrival time of a passenger at the LeetCode station.
# 
#  
# 
# Buses and passengers arrive at the LeetCode station. If a bus arrives at the station at time tbus and a passenger arrived at time tpassenger where tpassenger <= tbus and the passenger did not catch any bus, the passenger will use that bus.
# 
# Write a solution to report the number of users that used each bus.
# 
# Return the result table ordered by bus_id in ascending order.
# 
# The result format is in the following example.
#
# Example 1:
# Input:
# Buses table:
# +--------+--------------+
# | bus_id | arrival_time |
# +--------+--------------+
# | 1      | 2            |
# | 2      | 4            |
# | 3      | 7            |
# +--------+--------------+
# Passengers table:
# +--------------+--------------+
# | passenger_id | arrival_time |
# +--------------+--------------+
# | 11           | 1            |
# | 12           | 5            |
# | 13           | 6            |
# | 14           | 7            |
# +--------------+--------------+
# Output:
# +--------+----------------+
# | bus_id | passengers_cnt |
# +--------+----------------+
# | 1      | 1              |
# | 2      | 0              |
# | 3      | 3              |
# +--------+----------------+
# Explanation:
# - Passenger 11 arrives at time 1.
# - Bus 1 arrives at time 2 and collects passenger 11.
# 
# - Bus 2 arrives at time 4 and does not collect any passengers.
# 
# - Passenger 12 arrives at time 5.
# - Passenger 13 arrives at time 6.
# - Passenger 14 arrives at time 7.
# - Bus 3 arrives at time 7 and collects passengers 12, 13, and 14.

import pandas as pd

def count_passengers_in_bus(buses: pd.DataFrame, passengers: pd.DataFrame) -> pd.DataFrame:
  buses = buses.sort_values('arrival_time').reset_index(drop=True)
  passengers = passengers.sort_values('arrival_time').reset_index(drop=True)
  result = []
  prev_bus_time = -float('inf')
  for _, bus in buses.iterrows():
    cnt = len(passengers[(passengers['arrival_time'] > prev_bus_time) & (passengers['arrival_time'] <= bus['arrival_time'])])
    result.append({'bus_id': bus['bus_id'], 'passengers_cnt': cnt})
    prev_bus_time = bus['arrival_time']
  return pd.DataFrame(result).sort_values('bus_id')