Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
现在前端很多岗位面试需要有一定的算法基础,或者说经常刷算法的会优先考虑。
因此每天刷刷LeetCode非常有必要
在这之前我也刷过一些算法题,也希望以后也坚持刷,跟某掘友一样,我也想刷穿 LeetCode
一、题目描述
给你一个长度为 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] 。
二、思路分析
- 先拷贝一份原数组,对新数组降序排序
- 创建
map
,建立分数与名次的对应关系 - 遍历原数组,得到相应名次
三、代码实现
const findRelativeRanks = score => {
const newScore = [...score];
// 拷贝一份,并降序排序
newScore.sort((a, b) => b - a);
const map = new Map();
const len = newScore.length;
// 建立分数与名次的对应关系
for (let i = 0; i < len; i++) {
if (i === 0) {
map.set(newScore[i], 'Gold Medal');
} else if (i === 1) {
map.set(newScore[i], 'Silver Medal');
} else if (i === 2) {
map.set(newScore[i], 'Bronze Medal');
} else {
map.set(newScore[i], `${i + 1}`);
}
}
const res = [];
// 遍历原数组,得到相应名次
for (let i = 0; i < len; i++) {
res.push(map.get(score[i]));
}
return res;
};
四、总结
以上就是本道题的所有内容了,本系列会持续更,欢迎点赞、关注、收藏,另外如有其他的问题,欢迎下方留言给我,我会第一时间回复你,感谢~