刷题篇5 | 豆包MarsCode AI刷题

57 阅读3分钟

大家好哈哈,又见面了。今天继续给大家更新我们的刷题分享活动。来看下面这一道题目哈哈。

红包运气排行榜

问题描述

小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.  **理解问题**-   我们需要对抢红包的人进行排名,排名规则是:抢到的金额越多,排名越靠前;如果金额相同,则按照抢红包的顺序进行排名。
  1. 数据结构选择

    • 我们可以使用一个列表来存储每个人的信息,每个元素是一个元组,包含抢红包的人的名字和抢到的金额。
    • 这样我们可以方便地对列表进行排序。
  2. 算法步骤

    • 将每个人的名字和抢到的金额组合成一个元组列表。
    • 对元组列表进行排序,排序规则是先按金额降序排序,金额相同的按抢红包的顺序(即列表中的原始顺序)排序。
    • 提取排序后的列表中的名字,即为最终的排名结果。

详细步骤

  1. 组合元组列表

    • 将名字列表 s 和金额列表 x 组合成一个元组列表 people,每个元组包含一个名字和对应的金额。
  2. 排序

    • 使用 sorted 函数对 people 列表进行排序。
    • 排序的关键字是一个元组 (-p[1], s.index(p[0])),其中 -p[1] 表示按金额降序排序,s.index(p[0]) 表示金额相同的按抢红包的顺序排序。
  3. 提取名字

    • 从排序后的元组列表中提取名字,得到最终的排名结果。

通过以上步骤,你可以实现对抢红包的人进行运气排名的功能。

总结

朋友们看到了吗,这就是ai的神奇。希望以后ai可以帮我们解决更多的问题,我们就可以有更多的时间做自己想做的事情了。今天的分享就到这里,下一篇文章见。