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



/**
 * 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;

}


猜你喜欢

转载自blog.csdn.net/weixin_36094222/article/details/93644288