每日力扣算法题(简单篇)

506.相对名词

原题:

给你一个长度为 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 位运动员的获奖情况。

解题思路:
名次类型的题目大部分都是要排序的,但这里需要给每个运动员名次,并且要和原数组对应,那么我们可能需要把原数据复制下来,排序后再给名次,但是如果排序了原来的对应关系也就消失了,因此我们就得把原有的编号也保留下来,而能做到这样操作的非结构体莫属了,因此我们有如下代码。

知识储备:

qsort函数,函数原型qsort(指针,元素个数,元素所占字节,比较函数的指针),当要排序的元素是结构体,那么会默认以第一个成员为基准来排序

都看到这里了点个赞把,可以的话点个关注吧

源代码:

struct althe
{
    int score;
    int number;
};
int cmp(const void* a,const void* b)
{
    int numa=*(int*)a;
    int numb=*(int*)b;
    return numa>numb?1:-1;
}
char** findRelativeRanks(int* score, int scoreSize, int* returnSize) {
    struct althe save[scoreSize];
    char *one="Gold Medal",*two="Silver Medal",*three="Bronze Medal";
    *returnSize=scoreSize;
    for(int i=0;i=0;i--)
    {
        char *this=malloc(sizeof(char)*6);
        sprintf(this,"%d",scoreSize-i);
        ans[save[i].number]=this;
    }
    return ans;
}

你可能感兴趣的:(力扣简单篇,算法,leetcode,职场和发展)