返回介绍

solution / 1200-1299 / 1204.Last Person to Fit in the Bus / README

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

1204. 最后一个能进入巴士的人

English Version

题目描述

表: Queue

+-------------+---------+
| Column Name | Type  |
+-------------+---------+
| person_id   | int   |
| person_name | varchar |
| weight    | int   |
| turn    | int   |
+-------------+---------+
person_id 是这个表具有唯一值的列。
该表展示了所有候车乘客的信息。
表中 person_id 和 turn 列将包含从 1 到 n 的所有数字,其中 n 是表中的行数。
turn 决定了候车乘客上巴士的顺序,其中 turn=1 表示第一个上巴士,turn=n 表示最后一个上巴士。
weight 表示候车乘客的体重,以千克为单位。

 

有一队乘客在等着上巴士。然而,巴士有1000  千克 的重量限制,所以其中一部分乘客可能无法上巴士。

编写解决方案找出 最后一个 上巴士且不超过重量限制的乘客,并报告 person_name 。题目测试用例确保顺位第一的人可以上巴士且不会超重。

返回结果格式如下所示。

 

示例 1:

输入:
Queue 表
+-----------+-------------+--------+------+
| person_id | person_name | weight | turn |
+-----------+-------------+--------+------+
| 5     | Alice     | 250  | 1  |
| 4     | Bob     | 175  | 5  |
| 3     | Alex    | 350  | 2  |
| 6     | John Cena   | 400  | 3  |
| 1     | Winston   | 500  | 6  |
| 2     | Marie     | 200  | 4  |
+-----------+-------------+--------+------+
输出:
+-------------+
| person_name |
+-------------+
| John Cena   |
+-------------+
解释:
为了简化,Queue 表按 turn 列由小到大排序。
+------+----+-----------+--------+--------------+
| Turn | ID | Name    | Weight | Total Weight |
+------+----+-----------+--------+--------------+
| 1  | 5  | Alice   | 250  | 250      |
| 2  | 3  | Alex    | 350  | 600      |
| 3  | 6  | John Cena | 400  | 1000     | (最后一个上巴士)
| 4  | 2  | Marie   | 200  | 1200     | (无法上巴士)
| 5  | 4  | Bob     | 175  | ___      |
| 6  | 1  | Winston   | 500  | ___      |
+------+----+-----------+--------+--------------+

解法

方法一

# Write your MySQL query statement below
SELECT a.person_name
FROM
  Queue AS a,
  Queue AS b
WHERE a.turn >= b.turn
GROUP BY a.person_id
HAVING SUM(b.weight) <= 1000
ORDER BY a.turn DESC
LIMIT 1;

方法二

# Write your MySQL query statement below
WITH
  T AS (
    SELECT
      person_name,
      SUM(weight) OVER (ORDER BY turn) AS s
    FROM Queue
  )
SELECT person_name
FROM T
WHERE s <= 1000
ORDER BY s DESC
LIMIT 1;

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

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

发布评论

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