大家好哈哈,又见面了。今天继续给大家更新我们的刷题分享活动。来看下面这一道题目哈哈。
红包运气排行榜
问题描述
小C参与了一场抢红包的游戏,现在他想要对所有参与抢红包的人进行一次运气排名。排名规则如下:抢到的金额越多,排名越靠前;如果两个人抢到的金额相同,则按照他们抢红包的顺序进行排名。比如,如果小C和小U抢到的金额相同,但小C比小U先抢,则小C排在小U前面。
测试样例 样例1:
输入:n = 4 ,s = ["a", "b", "c", "d"] ,x = [1, 2, 2, 1] 输出:['b', 'c', 'a', 'd']
样例2:
输入:n = 3 ,s = ["x", "y", "z"] ,x = [100, 200, 200] 输出:['y', 'z', 'x']
样例3:
输入:n = 5 ,s = ["m", "n", "o", "p", "q"] ,x = [50, 50, 30, 30, 20] 输出:['m', 'n', 'o', 'p', 'q']
红包大家都抢过,这道题目就和抢红包有关。我们还是和之前一样把问题给咱们的豆包ai解决。 def solution(n: int, s: list, x: list) -> list: # 将每个人的名字和抢到的金额组合成一个元组列表 people = list(zip(s, x))
# 对元组列表进行排序,先按金额降序排序,金额相同的按抢红包的顺序排序
sorted_people = sorted(people, key=lambda p: (-p[1], s.index(p[0])))
# 提取排序后的列表中的名字
result = [p[0] for p in sorted_people]
return result
if name == 'main': print(solution(4, ["a", "b", "c", "d"], [1, 2, 2, 1]) == ['b', 'c', 'a', 'd']) print(solution(3, ["x", "y", "z"], [100, 200, 200]) == ['y', 'z', 'x']) print(solution(5, ["m", "n", "o", "p", "q"], [50, 50, 30, 30, 20]) == ['m', 'n', 'o', 'p', 'q'])
代码解释
1. **理解问题**:
- 我们需要对抢红包的人进行排名,排名规则是:抢到的金额越多,排名越靠前;如果金额相同,则按照抢红包的顺序进行排名。
-
数据结构选择:
- 我们可以使用一个列表来存储每个人的信息,每个元素是一个元组,包含抢红包的人的名字和抢到的金额。
- 这样我们可以方便地对列表进行排序。
-
算法步骤:
- 将每个人的名字和抢到的金额组合成一个元组列表。
- 对元组列表进行排序,排序规则是先按金额降序排序,金额相同的按抢红包的顺序(即列表中的原始顺序)排序。
- 提取排序后的列表中的名字,即为最终的排名结果。
详细步骤
-
组合元组列表:
- 将名字列表
s和金额列表x组合成一个元组列表people,每个元组包含一个名字和对应的金额。
- 将名字列表
-
排序:
- 使用
sorted函数对people列表进行排序。 - 排序的关键字是一个元组
(-p[1], s.index(p[0])),其中-p[1]表示按金额降序排序,s.index(p[0])表示金额相同的按抢红包的顺序排序。
- 使用
-
提取名字:
- 从排序后的元组列表中提取名字,得到最终的排名结果。
通过以上步骤,你可以实现对抢红包的人进行运气排名的功能。
总结
朋友们看到了吗,这就是ai的神奇。希望以后ai可以帮我们解决更多的问题,我们就可以有更多的时间做自己想做的事情了。今天的分享就到这里,下一篇文章见。