JavaScript算法每日一题相对名次

每日一题:每天一个新挑战;
循序渐进:从易到难,扎实掌握;
系统分类:按数据结构分类,有助于构建知识框架;
丰富题量:100 道精选题,覆盖简单/中等/困难难度。

给你一个长度为 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 <= 10^4
  • 0 <= score[i] <= 10^6
  • score 中的所有值 互不相同

代码卡片

JavaScript算法每日一题相对名次

题目解析

这道题要求我们根据运动员的得分给他们颁发奖项。得分最高的前三名分别获得金、银、铜牌,其余运动员根据名次得到相应的编号。我们可以利用排序和哈希表来解决这个问题。

方法一:排序 + 哈希表

  1. 首先,我们将 score 数组按得分从大到小排序。
  2. 然后,我们将排序后的数组与原始数组进行匹配,为每个运动员分配对应的奖项或名次编号。
  3. 最后,根据原始数组顺序返回结果。
  • 时间复杂度: O(n log n),其中 n 是数组 score 的长度。排序需要 O(n log n) 的时间,填充哈希表和构建答案数组需要 O(n) 的时间。
  • 空间复杂度: O(n),需要存储排序后的数组和哈希表。
var findRelativeRanks = function(score) {
    // 获取分数的长度
    const n = score.length;
    // 复制并排序数组(降序)
    const sortedScore = [...score].sort((a, b) => b - a);
    // 创建哈希表用于存储分数对应的名次
    const rankMap = new Map();

    // 为前3名分配奖牌,其余分配名次
    for (let i = 0; i < n; i++) {
        if (i === 0) {
            rankMap.set(sortedScore[i], "Gold Medal");
        } else if (i === 1) {
            rankMap.set(sortedScore[i], "Silver Medal");
        } else if (i === 2) {
            rankMap.set(sortedScore[i], "Bronze Medal");
        } else {
            rankMap.set(sortedScore[i], (i + 1).toString());
        }
    }

    // 根据原始顺序构建结果数组
    const answer = score.map(s => rankMap.get(s));
    return answer;
};

总结

这种方法利用排序和哈希表能有效地解决题目。它将问题分解为排序、哈希映射和数组构建三个步骤,每个步骤的实现都相对简单且高效。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/288991
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 3小时前
下一篇 3小时前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注