英文原文
You are given an integer array score
of size n
, where score[i]
is the score of the ith
athlete in a competition. All the scores are guaranteed to be unique.
The athletes are placed based on their scores, where the 1st
place athlete has the highest score, the 2nd
place athlete has the 2nd
highest score, and so on. The placement of each athlete determines their rank:
- The
1st
place athlete's rank is"Gold Medal"
. - The
2nd
place athlete's rank is"Silver Medal"
. - The
3rd
place athlete's rank is"Bronze Medal"
. - For the
4th
place to thenth
place athlete, their rank is their placement number (i.e., thexth
place athlete's rank is"x"
).
Return an array answer
of size n
where answer[i]
is the rank of the ith
athlete.
Example 1:
Input: score = [5,4,3,2,1] Output: ["Gold Medal","Silver Medal","Bronze Medal","4","5"] Explanation: The placements are [1st, 2nd, 3rd, 4th, 5th].
Example 2:
Input: score = [10,3,8,9,4] Output: ["Gold Medal","5","Bronze Medal","Silver Medal","4"] Explanation: The placements are [1st, 5th, 3rd, 2nd, 4th].
Constraints:
n == score.length
1 <= n <= 104
0 <= score[i] <= 106
- All the values in
score
are unique.
中文题目
给你一个长度为 n
的整数数组 score
,其中 score[i]
是第 i
位运动员在比赛中的得分。所有得分都 互不相同 。
运动员将根据得分 决定名次 ,其中名次第 1
的运动员得分最高,名次第 2
的运动员得分第 2
高,依此类推。运动员的名次决定了他们的获奖情况:
- 名次第
1
的运动员获金牌"Gold Medal"
。 - 名次第
2
的运动员获银牌"Silver Medal"
。 - 名次第
3
的运动员获铜牌"Bronze Medal"
。 - 从名次第
4
到第n
的运动员,只能获得他们的名次编号(即,名次第x
的运动员获得编号"x"
)。
使用长度为 n
的数组 answer
返回获奖,其中 answer[i]
是第 i
位运动员的获奖情况。
示例 1:
输入:score = [5,4,3,2,1] 输出:["Gold Medal","Silver Medal","Bronze Medal","4","5"] 解释:名次为 [1st, 2nd, 3rd, 4th, 5th] 。
示例 2:
输入:score = [10,3,8,9,4] 输出:["Gold Medal","5","Bronze Medal","Silver Medal","4"] 解释:名次为 [1st, 5th, 3rd, 2nd, 4th] 。
提示:
n == score.length
1 <= n <= 104
0 <= score[i] <= 106
score
中的所有值 互不相同
通过代码
高赞题解
模拟
根据题意,我们可以先对 score
数组进行拷贝并排序,利用分数各不相同,对排序数组中分值进行名次编号(存入哈希表),再利用名次编号构造答案。
代码:
class Solution {
String[] ss = new String[]{"Gold Medal", "Silver Medal", "Bronze Medal"};
public String[] findRelativeRanks(int[] score) {
int n = score.length;
String[] ans = new String[n];
int[] clone = score.clone();
Arrays.sort(clone);
Map<Integer, Integer> map = new HashMap<>();
for (int i = n - 1; i >= 0; i--) map.put(clone[i], n - 1 - i);
for (int i = 0; i < n; i++) {
int rank = map.get(score[i]);
ans[i] = rank < 3 ? ss[rank] : String.valueOf(rank + 1);
}
return ans;
}
}
- 时间复杂度:拷贝
score
数组的复杂度为 $O(n)$;对拷贝数组进行排序的复杂度为 $O(n\log{n})$;构造哈希表的复杂度为 $O(n)$;利用哈希表构造答案复杂度为 $O(n)$。整体复杂度为 $O(n\log{n})$ - 空间复杂度:$O(n)$
其他「排序/模拟」相关内容
题太简单?不如来学习热乎的 图论搜索专题の灵活运用多种搜索方式 Ⅱ 🤣
- 考虑加练如下「排序」内容 🍭🍭🍭
题目 | 题解 | 难度 | 推荐指数 |
---|---|---|---|
41. 缺失的第一个正数 | LeetCode 题解链接 | 困难 | 🤩🤩🤩 |
220. 存在重复元素 III | LeetCode 题解链接 | 中等 | 🤩🤩🤩 |
268. 丢失的数字 | LeetCode 题解链接 | 简单 | 🤩🤩🤩🤩 |
414. 第三大的数 | LeetCode 题解链接 | 中等 | 🤩🤩🤩🤩 |
448. 找到所有数组中消失的数字 | LeetCode 题解链接 | 简单 | 🤩🤩🤩 |
524. 通过删除字母匹配到字典里最长单词 | LeetCode 题解链接 | 中等 | 🤩🤩🤩🤩 |
581. 最短无序连续子数组 | LeetCode 题解链接 | 中等 | 🤩🤩🤩🤩 |
611. 有效三角形的个数 | LeetCode 题解链接 | 中等 | 🤩🤩🤩🤩 |
645. 错误的集合 | LeetCode 题解链接 | 简单 | 🤩🤩🤩 |
703. 数据流中的第 K 大元素 | LeetCode 题解链接 | 简单 | 🤩🤩🤩 |
987. 二叉树的垂序遍历 | LeetCode 题解链接 | 困难 | 🤩🤩🤩🤩🤩 |
1833. 雪糕的最大数量 | LeetCode 题解链接 | 中等 | 🤩🤩🤩🤩🤩 |
1834. 单线程 CPU | LeetCode 题解链接 | 中等 | 🤩🤩🤩🤩 |
1838. 最高频元素的频数 | LeetCode 题解链接 | 中等 | 🤩🤩🤩 |
面试题 10.02. 变位词组 | LeetCode 题解链接 | 中等 | 🤩🤩🤩🤩 |
面试题 17.14. 最小K个数 | LeetCode 题解链接 | 中等 | 🤩🤩🤩🤩 |
注:以上目录整理来自 wiki,任何形式的转载引用请保留出处。
- 考虑加练如下「模拟」内容 🍭🍭🍭
注:以上目录整理来自 wiki,任何形式的转载引用请保留出处。
最后
如果有帮助到你,请给题解点个赞和收藏,让更多的人看到 ~ (“▔□▔)/
也欢迎你 关注我 和 加入我们的「组队打卡」小群 ,提供写「证明」&「思路」的高质量题解。
所有题解已经加入 刷题指南,欢迎 star 哦 ~
统计信息
通过次数 | 提交次数 | AC比率 |
---|---|---|
54274 | 83226 | 65.2% |
提交历史
提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
---|