3401. 寻找环形礼物交换链 🔒
题目描述
表:SecretSanta
+-------------+------+ | Column Name | Type | +-------------+------+ | giver_id | int | | receiver_id | int | | gift_value | int | +-------------+------+ (giver_id, receiver_id) 是这张表的唯一主键。 每一行表示两个员工之间的一次礼物交换记录,giver_id 表示给予礼物的员工,receiver_id 表示收到礼物的员工,gift_value 表示所给予礼物的价值。
编写一个解决方案来找到 总礼物价值 以及 环形礼物交换链的长度:
环形链 被定义为一系列交换,其中:
- 每位员工都正好向另 一位 员工赠送一份礼物。
- 每位员工都正好从另 一位 员工那里收到一份礼物。
- 交换形成一个连续的循环(即 员工 A 给 B 一份礼物,B 给 C,C 再给 A)。
返回结果以链的长度和总礼物价值 降序 排序。
结果格式如下所示。
示例:
输入:
SecretSanta 表:
+----------+-------------+------------+ | giver_id | receiver_id | gift_value | +----------+-------------+------------+ | 1 | 2 | 20 | | 2 | 3 | 30 | | 3 | 1 | 40 | | 4 | 5 | 25 | | 5 | 4 | 35 | +----------+-------------+------------+
输出:
+----------+--------------+------------------+ | chain_id | chain_length | total_gift_value | +----------+--------------+------------------+ | 1 | 3 | 90 | | 2 | 2 | 60 | +----------+--------------+------------------+
解释:
- 链 1 包含员工 1,2 和 3:
- 员工 1 给 2 一份礼物,员工 2 给 3 一份礼物,员工 3 给 1 一份礼物。
- 这个链的总礼物价值 = 20 + 30 + 40 = 90。
- 链 2 包含员工 4 和 5:
- 员工 4 给 5 一份礼物,员工 5 给 4 一份礼物。
- 这个链的总礼物价值 = 25 + 35 = 60。
结果表以链的长度和总礼物价值降序排序。
解法
方法一
1 |
|