leetcode-1093. 大样本统计-C语言

本文介绍了一个使用C语言实现的函数,该函数接收一个整数数组作为输入,并返回一个包含五项统计信息的双精度浮点数数组:最小值、最大值、平均值、中位数和众数。通过遍历数组并使用qsort进行排序,函数能够有效地计算这些统计量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



/**
 * Note: The returned array must be malloced, assume caller calls free().
 */


typedef struct n_t{
    int val;
    int cnt;
} Node;

int cmp(Node *a, Node *b){
    
    return a->val - b->val;
}

double* sampleStats(int* arr, int len, int* returnSize){
    int i;
    double *ret = (double *)malloc(sizeof(double) * 5);
    Node n[1024];
    int index = 0, min=INT_MAX, max=INT_MIN, num_cnt=0;
    double cnt=0 ;
    
    //qsort(arr, len, sizeof(int), cmp);
    memset(n, 0, sizeof(n));
    
    for(i=0; i<len; i++){
        if(arr[i]){
            n[index].val = i;
            n[index++].cnt = arr[i];
            cnt += arr[i]*i;
            num_cnt += arr[i];
        }
    }
    
    qsort(n, index, sizeof(Node), cmp);
    
    int max_cnt = 0, value = 0;
    int left1 = (num_cnt-1)/2;
    int left2 = num_cnt/2;
    int left =0;
    int tmp;
    ret[3] = 0;
    printf("left1 = %d, left2= %d\n", left1, left2);
    int f1=1, f2=1;
    for(i=0; i<index; i++){
        tmp = n[i].cnt;
        left += tmp;
        if(left >= left1 + 1 && f1){
            f1 = 0;
            ret[3] += n[i].val;
        }
        if(left >= left2 + 1 && f2){
            f2 = 0;
            ret[3] += n[i].val;
        }
        
        if(n[i].cnt > max_cnt){
            max_cnt = n[i].cnt;
            value = n[i].val;
        }
    }
    
    ret[0] = n[0].val;
    ret[1] = n[index-1].val;
    ret[2] = cnt / num_cnt;
    ret[3] /= 2;
    ret[4] = value;

    *returnSize = 5;
    
    return ret;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值