llllmz

导航

347. 前 K 个高频元素C

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
typedef struct node{
    int num;
    int count;
}HASH;

void insert(HASH* h,int n,int size){
    int index=abs(n)%size;
    if(h[index].count==0 || h[index].num==n){
        h[index].count++;
        h[index].num=n;
    }else{
        while(h[index].count!=0 && h[index].num!=n) index=(index+1)%size;
        h[index].num=n;
        h[index].count++;
    }
}

int cmp( const void* a,const void* b  ){
    HASH* x=(HASH*)a;
    HASH* y=(HASH*)b;
    if(x->count > y->count) return -1;
    return 1;
}

int* topKFrequent(int* nums, int numsSize, int k, int* returnSize) {
    HASH* h=(HASH*)malloc(sizeof(HASH)*numsSize);
    for(int i=0;i<numsSize;i++) h[i].count=0;
    for(int i=0;i<numsSize;i++){
        insert(h,nums[i],numsSize);
    }
    qsort(h,numsSize,sizeof(HASH),cmp);
    for(int i=0;i<numsSize;i++) printf("%d ",h[i].num);
    *returnSize=k;
    int* array=(int*)malloc(sizeof(int)*k);
    for(int i=0;i<k;i++){
        array[i]=h[i].num;
    }
    return array;
}

 

posted on 2024-03-20 10:55  神奇的萝卜丝  阅读(40)  评论(0)    收藏  举报