1. 問題描述:
給出 n 名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 「金牌」,「銀牌」 和「 銅牌」("gold medal", "silver medal", "bronze medal")。(注:分數越高的選手,排名越靠前。)
示例 1:
輸入: [5, 4, 3, 2, 1]
輸出: ["gold medal", "silver medal", "bronze medal", "4", "5"]
解釋: 前三名運動員的成績為前三高的,因此將會分別被授予 「金牌」,「銀牌」和「銅牌」 ("gold medal", "silver medal" and "bronze medal").
餘下的兩名運動員,我們只需要通過他們的成績計算將其相對名次即可
n 是乙個正整數並且不會超過 10000。
所有運動員的成績都不相同。
2. 思路分析:
分析題目可以知道我們需要先對成績陣列進行排序才知道名次情況,所以先要對陣列進行排序,然後遍歷排序之後的陣列,使用map來記錄對應的名次關係,對於python語言可以使用字典來記錄對應分數--名次關係,最後遍歷一下未排序的成績陣列,根據map中記錄的名次關係得到當前的分數--名次的關係
3. **如下:
import collections
from typing import list
class solution:
def findrelativeranks(self, nums: list[int]) -> list[str]:
# 先排序(從大到小進行排序), sorted得到排序陣列的副本
nums_sort = sorted(nums, reverse=true)
# 使用collections.defaultdict(str)方法生成乙個字典
dic = collections.defaultdict(str)
for i in range(len(nums)):
# 使用字典記錄對應的分數--名次關係
dic[nums_sort[i]] = str(i + 1)
res = ["0" for i in range(len(nums))]
dic[nums_sort[0]] = "gold medal"
if len(nums) > 1:
dic[nums_sort[1]] = "silver medal"
if len(nums) > 2:
dic[nums_sort[2]] = "bronze medal"
for i in range(len(nums)):
res[i] = dic[nums[i]]
return res
506 相對名次
給出 n 名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 金牌 銀牌 和 銅牌 gold medal silver medal bronze medal 注 分數越高的選手,排名越靠前。示例 1 輸入 5,4,3,2,1 輸出 gold medal silver...
Leetcode 506相對名次
給出n名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 金牌 銀牌 和 銅牌 gold medal silver medal bronze medal 注 分數越高的選手,排名越靠前。示例 1 輸入 5,4,3,2,1 輸出 gold medal silver m...
LeetCode506 相對名次
給出 n 名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 金牌 銀牌 和 銅牌 gold medal silver medal bronze medal 注 分數越高的選手,排名越靠前。示例 1 n 是乙個正整數並且不會超過 10000。所有運動員的成績都不相同...