返回

数据结构学习笔记,LeetCode平台刷题技巧

后端

今天在刷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解题笔记对您有所帮助。如果您有任何问题或建议,欢迎在评论区留言。