返回介绍

solution / 0500-0599 / 0506.Relative Ranks / README_EN

发布于 2024-06-17 01:04:00 字数 4934 浏览 0 评论 0 收藏 0

506. Relative Ranks

中文文档

Description

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 the nth place athlete, their rank is their placement number (i.e., the xth 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.

Solutions

Solution 1

class Solution:
  def findRelativeRanks(self, score: List[int]) -> List[str]:
    n = len(score)
    idx = list(range(n))
    idx.sort(key=lambda x: -score[x])
    top3 = ['Gold Medal', 'Silver Medal', 'Bronze Medal']
    ans = [None] * n
    for i in range(n):
      ans[idx[i]] = top3[i] if i < 3 else str(i + 1)
    return ans
class Solution {
  public String[] findRelativeRanks(int[] score) {
    int n = score.length;
    Integer[] idx = new Integer[n];
    for (int i = 0; i < n; ++i) {
      idx[i] = i;
    }
    Arrays.sort(idx, (i1, i2) -> score[i2] - score[i1]);
    String[] ans = new String[n];
    String[] top3 = new String[] {"Gold Medal", "Silver Medal", "Bronze Medal"};
    for (int i = 0; i < n; ++i) {
      ans[idx[i]] = i < 3 ? top3[i] : String.valueOf(i + 1);
    }
    return ans;
  }
}
class Solution {
public:
  vector<string> findRelativeRanks(vector<int>& score) {
    int n = score.size();
    vector<pair<int, int>> idx;
    for (int i = 0; i < n; ++i)
      idx.push_back(make_pair(score[i], i));
    sort(idx.begin(), idx.end(),
      [&](const pair<int, int>& x, const pair<int, int>& y) { return x.first > y.first; });
    vector<string> ans(n);
    vector<string> top3 = {"Gold Medal", "Silver Medal", "Bronze Medal"};
    for (int i = 0; i < n; ++i)
      ans[idx[i].second] = i < 3 ? top3[i] : to_string(i + 1);
    return ans;
  }
};
func findRelativeRanks(score []int) []string {
  n := len(score)
  idx := make([][]int, n)
  for i := 0; i < n; i++ {
    idx[i] = []int{score[i], i}
  }
  sort.Slice(idx, func(i1, i2 int) bool {
    return idx[i1][0] > idx[i2][0]
  })
  ans := make([]string, n)
  top3 := []string{"Gold Medal", "Silver Medal", "Bronze Medal"}
  for i := 0; i < n; i++ {
    if i < 3 {
      ans[idx[i][1]] = top3[i]
    } else {
      ans[idx[i][1]] = strconv.Itoa(i + 1)
    }
  }
  return ans
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文