返回介绍

solution / 2100-2199 / 2153.The Number of Passengers in Each Bus II / README

发布于 2024-06-17 01:03:09 字数 2960 浏览 0 评论 0 收藏 0

2153. 每辆车的乘客人数 II

English Version

题目描述

表: Buses

+--------------+------+
| Column Name  | Type |
+--------------+------+
| bus_id     | int  |
| arrival_time | int  |
| capacity   | int  |
+--------------+------+
bus_id 包含唯一的值。
该表的每一行都包含关于公交车到达 LeetCode 站点的时间和它的容量 (空座位的数量) 的信息。
不会出现两辆公交车同时到达,所有公交车的容量都是正整数。

 

表: Passengers

+--------------+------+
| Column Name  | Type |
+--------------+------+
| passenger_id | int  |
| arrival_time | int  |
+--------------+------+
passenger_id 包含唯一的值。
该表的每一行都包含乘客到达 LeetCode 站的时间信息。

 

公交车和乘客到达 LeetCode 站。如果一辆公交车在 tbus 时间点到达车站,乘客在 tpassenger 到达车站,其中 tpassenger <= tbus,而该乘客没有赶上任何公交车,则该乘客将搭乘该公交车。此外,每辆公交车都有一个容量。如果在公交车到站的那一刻,等待的乘客超过了它的载客量 capacity,只有 capacity 个乘客才会搭乘该公交车。

编写解决方案,报告使用每条总线的用户数量。

返回按 bus_id 升序排序 的结果表。

结果格式如下所示。

 

示例 1:

输入: 
Buses 表:
+--------+--------------+----------+
| bus_id | arrival_time | capacity |
+--------+--------------+----------+
| 1    | 2      | 1    |
| 2    | 4      | 10     |
| 3    | 7      | 2    |
+--------+--------------+----------+
Passengers 表:
+--------------+--------------+
| passenger_id | arrival_time |
+--------------+--------------+
| 11       | 1      |
| 12       | 1      |
| 13       | 5      |
| 14       | 6      |
| 15       | 7      |
+--------------+--------------+
输出: 
+--------+----------------+
| bus_id | passengers_cnt |
+--------+----------------+
| 1    | 1        |
| 2    | 1        |
| 3    | 2        |
+--------+----------------+
解释: 
- 11 号乘客在时间 1 到达。
- 12 号乘客在时间 1 到达。
- 1 号公交车到达时间为 2,因为有一个空座位,所以搭载了 11 号乘客。

- 2 号公交车在时间 4 到达,搭载了12 号乘客,因为它有 10 个空座位。

- 13 号乘客在时间 5 到达。
- 14 号乘客在时间 6 到达。
- 15 号乘客在时间 7 到达。
- 3 号公交车在时间 7 到达,车上有两个空座位,搭载了 12 号和 13 号乘客。

解法

方法一

# Write your MySQL query statement below
WITH
  T AS (
    SELECT
      *,
      SUM(cnt) OVER (ORDER BY dt, bus_id) AS cur,
      IF(@t > 0, @t := cnt, @t := @t + cnt) AS cur_sum
    FROM
      (
        SELECT bus_id, arrival_time AS dt, capacity AS cnt FROM Buses
        UNION ALL
        SELECT -1, arrival_time AS dt, -1 FROM Passengers
      ) AS a JOIN (SELECT @t := 0 x) AS b
  )
SELECT
  bus_id,
  IF(cur_sum > 0, cnt - cur_sum, cnt) AS passengers_cnt
FROM T
WHERE bus_id > 0
ORDER BY bus_id;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文