力扣 506.相对名词 纯C解法

简介: 力扣 506.相对名词 纯C解法

题目描述:

给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同

运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高,名次第 2 的运动员得分第 2 高,依此类推。运动员的名次决定了他们的获奖情况:

  • 名次第 1 的运动员获金牌 "Gold Medal"
  • 名次第 2 的运动员获银牌 "Silver Medal"
  • 名次第 3 的运动员获铜牌 "Bronze Medal"
  • 从名次第 4 到第 n 的运动员,只能获得他们的名次编号(即,名次第 x 的运动员获得编号 "x")。

思路:

创建一个结构体数组保存选手的分数和索引值

对结构体数组进行排序

依次遍历所有选手,前三名获奖,其他只获得名词

图解:

代码:

typedef struct table {
    int score;//分数
    int index;//分数所在的索引
}table;
int cmp1(const void* a, const void* b) {
    return ((table*)b)->score - ((table*)a)->score;
}
char* toString(int val) {
    char* arr = (char*)malloc(sizeof(char) * 13);
    int top = 0;
    while (val > 0) {
        int num = val % 10;
        val /= 10;
        arr[top++] = num + '0';
    }
    arr[top] = 0;
    int left = 0, right = top - 1;
    // 翻转字符串
    while (left < right) {
        int tmp = arr[left];
        arr[left++] = arr[right];
        arr[right--] = tmp;
    }
    return arr;
}
char** findRelativeRanks(int* score, int scoreSize, int* returnSize) {
    (*returnSize) = scoreSize;
    //创建Hash表
    table* t = (table*)malloc(sizeof(table) * scoreSize);
    int top = 0;
    //初始化hash表
    for (int i = 0; i < scoreSize; i++) {
        t[i].score = score[i];
        t[i].index = i;
    }
    //对hash表降序排序,得出名次表
    qsort(t, scoreSize, sizeof(t[0]), cmp1);
    char** ans = malloc(sizeof(char*) * scoreSize);
    char* desc[] = { "Gold Medal", "Silver Medal", "Bronze Medal" };
    //初始化ans
    for (int i = 0; i < scoreSize; i++) {
        char* tmp = (char*)malloc(sizeof(char) * 13);
        ans[i] = tmp;
    }
    for (int i = 0; i < scoreSize; i++) {
        char* tmp = (char*)malloc(sizeof(char) * 13);
        if (i >= 3) {
            ans[t[i].index] = toString(i + 1);
        }
        else {
            ans[t[i].index] = desc[i];
        }
    }
    return ans;
}
相关文章
【Leetcode -1609.奇偶树 -1122.数组的相对排序】
【Leetcode -1609.奇偶树 -1122.数组的相对排序】
48 0
|
3月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
52 6
|
3月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
50 1
|
3月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
61 1
|
3月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
55 0
|
3月前
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
39 0
|
5月前
|
存储 机器学习/深度学习 算法
皇后之战:揭秘N皇后问题的多维解法与智慧【python 力扣52题】
皇后之战:揭秘N皇后问题的多维解法与智慧【python 力扣52题】
|
5月前
|
存储 算法 数据可视化
力扣156题最全解法:如何上下翻转二叉树(递归与迭代方法详解,附图解)
力扣156题最全解法:如何上下翻转二叉树(递归与迭代方法详解,附图解)
|
5月前
|
存储 算法 数据可视化
深入解析力扣157题:用Read4高效读取N个字符(多种解法与详细图解)
深入解析力扣157题:用Read4高效读取N个字符(多种解法与详细图解)
|
5月前
|
存储 算法 数据可视化
力扣155题最全解法:如何实现支持常数时间获取最小值的最小栈(附详细图解和复杂度分析)
力扣155题最全解法:如何实现支持常数时间获取最小值的最小栈(附详细图解和复杂度分析)