1.问题
问题描述
小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']
2.思路
题目补充
n表示参与抢红包的人数。s是一个长度为n的字符串列表,表示每个人的名字。x是一个长度为n的整数列表,表示每个人抢到的红包金额。
两者之间是一一对应的关系:s[i] 表示第 i 个人的名字,而 x[i] 表示该人抢到的红包金额。
样例1:
输入:
n = 4 ,s = ["a", "b", "c", "d"] ,x = [1, 2, 2, 1]输出:['b', 'c', 'a', 'd']
bcad
- 生成字典,
s中的值为键,x中对应的值为值 - 对字典排序,先按值排序,值一样的话按先后顺序排序
- 定义结果数组
- 按序将字典的键加入结果数组
3.代码
import re
def solution(n: int, s: list, x: list) -> list:
# write code here
data = {}
for i in range(len(s)):
data[s[i]] = x[i]
# 使用 enumerate 记录原始顺序
sorted_items = sorted(data.items(), key=lambda item: (-item[1], list(data.keys()).index(item[0])))
# 生成排序后的字典(如果需要)
sorted_dict = dict(sorted_items)
result = []
for key in sorted_dict.keys():
result.append(key)
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'])
样例4有误
我们需要按照金额 X 的值进行排序,金额大的在前,金额相同时按照 S 的输入顺序排列。
排序逻辑
- 按金额从大到小排序。
- 如果金额相同,按原始顺序排序。
以下是详细的排序步骤:
- "aa" 抢到 17。
- "aaaaaaa" 抢到 14。
- "aaaa" 抢到 11。
- "aaaa" 抢到 2。
- "aaaa" 抢到 8。
- "aaaaaaaaaa" 抢到 16。
- "aaaaaaaaa" 抢到 14。
- "aaaa" 抢到 17。
- "aaaaaaaaaa" 抢到 10。
- "aaaaaaaaa" 抢到 6。
- "aaaaa" 抢到 5。
- "aaaa" 抢到 12。
按照金额从大到小排序并保留输入顺序:
- 金额为 17 的有 "aa"(索引 0) 和 "aaaa"(索引 7),"aa" 在前。
- 金额为 16 的是 "aaaaaaaaaa"(索引 5)。
- 金额为 14 的有 "aaaaaaa"(索引 1) 和 "aaaaaaaaa"(索引 6),"aaaaaaa" 在前。
- 金额为 12 的是 "aaaa"(索引 11)。
- 金额为 11 的是 "aaaa"(索引 2)。
- 金额为 10 的是 "aaaaaaaaaa"(索引 8)。
- 金额为 8 的是 "aaaa"(索引 4)。
- 金额为 6 的是 "aaaaaaaaa"(索引 9)。
- 金额为 5 的是 "aaaaa"(索引 10)。
- 金额为 2 的是 "aaaa"(索引 3)。
输出
最终结果的顺序为:
['aa', 'aaaa', 'aaaaaaaaaa', 'aaaaaaa', 'aaaaaaaaa', 'aaaa', 'aaaa', 'aaaaaaaaaa', 'aaaa', 'aaaaaaaaa', 'aaaaa', 'aaaa']