返回
数据结构学习笔记,LeetCode平台刷题技巧
后端
2023-10-27 08:03:07
今天在刷LeetCode的时候,遇到了一个相对名次的题目,我想在这里和大家分享一下我的解题思路和代码实现。
我们先来看一下题目的
给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位同学的分数。另有一个长度为 n 的整数数组 ages ,其中 ages[i] 是第 i 位同学的年龄。
每位同学的成绩都有一个 相对名次 ,相对名次 定义如下:
* 名次 1 的同学有 最高 成绩。
* 名次 2 的同学有 第二高 成绩。
* 依此类推,名次 n 的同学有 最低 成绩。
* 如果你拥有多位成绩相同的花,我们将根据他们的年龄来决定他们的名次。如果他们的年龄也相同,那么他们的名次将被按字典序排列。
请你返回一个数组 answer ,其中 answer[i] 是第 i 位同学的相对名次。
示例 1:
输入:score = [10,3,8,9,4], ages = [5,4,2,1,3]
输出:[5,4,2,1,3]
解释:
- 排序后的成绩列表:[10,9,8,4,3]
- 相对名次列表:[5,4,2,1,3]
示例 2:
输入:score = [2,2,3,3], ages = [4,2,1,1]
输出:[4,2,3,1]
解释:
- 排序后的成绩列表:[3,3,2,2]
- 相对名次列表:[4,2,3,1]
分析:
这里的题目的难点在于需要同时考虑分数和年龄来确定名次。我们可以先将分数和年龄组合成一个元组,然后按照分数降序、年龄升序对元组进行排序。接下来,我们就可以根据元组的排名来确定每个同学的相对名次了。
代码实现:
def relative_ranks(score, ages):
# 将分数和年龄组合成元组
students = list(zip(score, ages))
# 对元组进行排序
students.sort(key=lambda x: (-x[0], x[1]))
# 根据元组的排名确定相对名次
ranks = []
for i, student in enumerate(students):
if i == 0:
ranks.append("Gold Medal")
elif i == 1:
ranks.append("Silver Medal")
elif i == 2:
ranks.append("Bronze Medal")
else:
ranks.append(str(i + 1))
return ranks
# 测试代码
score = [10, 3, 8, 9, 4]
ages = [5, 4, 2, 1, 3]
print(relative_ranks(score, ages)) # 输出:[5, 4, 2, 1, 3]
score = [2, 2, 3, 3]
ages = [4, 2, 1, 1]
print(relative_ranks(score, ages)) # 输出:[4, 2, 3, 1]
希望这篇LeetCode解题笔记对您有所帮助。如果您有任何问题或建议,欢迎在评论区留言。