跳到主要内容

506.相对名次

链接:506.相对名次
难度:Easy
标签:数组、排序、堆(优先队列)
简介:使用长度为 n 的数组 answer 返回获奖,其中 answer[i] 是第 i 位运动员的获奖情况。

题解 1 - typescript

  • 编辑时间:2021-12-02
  • 执行用时:96ms
  • 内存消耗:40.9MB
  • 编程语言:typescript
  • 解法介绍:排序。
function findRelativeRanks(score: number[]): string[] {
const n = score.length;
const idxs = new Array(n)
.fill(0)
.map((_, i) => i)
.sort((a, b) => score[b] - score[a]);
const ans: string[] = [];
for (let i = 0; i < n; i++) {
const str =
i === 0 ? 'Gold Medal' : i === 1 ? 'Silver Medal' : i === 2 ? 'Bronze Medal' : `${i + 1}`;
ans[idxs[i]] = str;
}
return ans;
}

题解 2 - c

  • 编辑时间:2021-12-02
  • 执行用时:16ms
  • 内存消耗:7.9MB
  • 编程语言:c
  • 解法介绍:遍历。
int *g_score;
int comp(const void *a, const void *b) {
return g_score[*(int *)b] - g_score[*(int *)a];
}
char ** findRelativeRanks(int* score, int scoreSize, int* returnSize){
g_score = score;
*returnSize = scoreSize;
int *idxs = (int *)malloc(sizeof(int) * scoreSize);
for (int i = 0; i < scoreSize; i++) idxs[i] = i;
qsort(idxs, scoreSize, sizeof(int), comp);
char **ans = (char **)malloc(sizeof(char *) * scoreSize);
for (int i = 0; i < scoreSize; i++) {
if (i == 0) ans[idxs[i]] = "Gold Medal";
else if (i == 1) ans[idxs[i]] = "Silver Medal";
else if (i == 2) ans[idxs[i]] = "Bronze Medal";
else {
ans[idxs[i]] = (char *)malloc(10);
sprintf(ans[idxs[i]], "%d", i + 1);
}
}
return ans;
}