leetcode:506. 相对名次

一、题目

leetcode:506. 相对名次_第1张图片

 

函数原型:char** findRelativeRanks(int* score, int scoreSize, int* returnSize)

二、思路

创建一个新的数组newscore,将原数组数据拷贝到新数组,降序排序新数组。

遍历原数组,在新数组中找到原数组中数据在新数组中的位置,该位置即表示名次。

将对应的名词信息填入字符串数组中即可。

三、代码

int cmp(const void* e1, const void* e2)
{
    return *(int*)e2 - *(int*)e1;
}
char** findRelativeRanks(int* score, int scoreSize, int* returnSize) {
    *returnSize = scoreSize;
    int* newscore = (int*)malloc(sizeof(int) * scoreSize);//新数组
    for (int k = 0; k < scoreSize; k++)//将原数组数据拷贝到新数组
    {
        newscore[k] = score[k];
    }
    qsort(newscore, scoreSize, sizeof(int), cmp);//排序新数组(降序)

    char** ans = (char**)malloc(sizeof(char*) * scoreSize);//字符串数组

    for (int j = 0; j < scoreSize; j++)//遍历原数组
    {
        for (int i = 0; i < scoreSize; i++)//在新数组中查找原数组数据的位置
        {
            if (score[j] == newscore[i])
            {
                ans[j] = (char*)malloc(sizeof(char) * 13);//申请字符串空间
                memset(ans[j], 0, sizeof(char) * 13);
                switch (i + 1)
                {
                case 1:ans[j] = "Gold Medal";
                    break;
                case 2:ans[j] = "Silver Medal";
                    break;
                case 3:ans[j] = "Bronze Medal";
                    break;
                default:sprintf(ans[j], "%d", i + 1);
                    break;
                }
                break;
            }
        }
    }
    return ans;
}

你可能感兴趣的:(leetcode刷题训练营,leetcode,算法,职场和发展)