【C语言刷LeetCode】1086. 前五科的均分(EL)

给你一个不同学生的分数列表,请按 学生的 id 顺序 返回每个学生 最高的五科 成绩的 平均分。
对于每条 items[i] 记录, items[i][0] 为学生的 id,items[i][1] 为学生的分数。平均分请采用整数除法计算。
输入:[[1,91],[1,92],[2,93],[2,97],[1,60],[2,77],[1,65],[1,87],[1,100],[2,100],[2,76]]
输出:[[1,87],[2,88]]
解释:
id = 1 的学生平均分为 87。
id = 2 的学生平均分为 88.6。但由于整数除法的缘故,平均分会被转换为 88。

提示:
1 <= items.length <= 1000
items[i].length == 2
学生的 ID 在 1 到 1000 之间
学生的分数在 1 到 100 之间
每个学生至少有五个分数

见到数组先考虑排序,排序用qsort。

此题便是二维数组qsort先排个序,先按照学生id升序,如果学生id相同则按照成绩降序。

排序完成后,题目难度骤降。后面需要设置一个flag,识别是否到达下一个学生。

这道题也是被锁了,所以只测试了给的用例。

int comp(void const *a, void const *b) {
    int *one = *(int **)a;
    int *two = *(int **)b;
    
    if (one[0] == two[0]) {  
        return two[1] - one[1]; // 第二个元素降序
    } else {
        return one[0] - two[0]; // 第一个元素升序
    }
}

int** highFive(int** items, int itemsSize, int* itemsColSize, int* returnSize, int** returnColumnSizes){
    int **retarr;
    int i;
    int cnt = 0;
    int maxId = 0;
    int idx = 0;
    int sum = 0;
    int flag = 0;
    int index = 0;
    
    qsort(items, itemsSize, sizeof(items[0]), comp);

    maxId = items[itemsSize - 1][0];
    idx = items[0][0];
    
    retarr = (int **)malloc(sizeof(int *) * maxId);
    returnColumnSizes[0] = (int *)malloc(sizeof(int) * maxId);
    for (i = 0; i < maxId; i++) {
        retarr[i] = (int *)malloc(sizeof(int) * 2);
        memset(retarr[i], 0, sizeof(int) * 2);
        returnColumnSizes[0][i] = 2;
    }

    for (i = 0; i < itemsSize; i++) {
        if (flag == 1) {
            if (idx == items[i][0]) {
                continue;
            } else {
                flag = 0;
                idx = items[i][0];
            }
        }
        
        if(cnt < 5) {
            sum += items[i][1];
            cnt++;
        } 
        
        if (cnt == 5){
            retarr[index][1] = sum / 5;
            retarr[index][0] = idx;
            sum = 0; 
            cnt = 0;
            flag = 1;
            index++;
        }
    }

    *returnSize = index + 1;

    return retarr;
}

 

你可能感兴趣的:(LeetCode)