struct Times{
int num;
int cnt;
};
int cmp(const void* a,const void* b){
return *(int*)a - *(int*)b;
}
int cmps(const void* a,const void* b){
return (*(struct Times*)b).cnt - (*(struct Times*)a).cnt;
}
int* topKFrequent(int* nums, int numsSize, int k, int* returnSize){
*returnSize = k;
int* res = (int*)malloc(sizeof(int)*k);
struct Times time[numsSize];
int index=0;
qsort(nums,numsSize,sizeof(int),cmp);
time[index].num = nums[0];
time[index].cnt = 1;
for(int i=1;i<numsSize;i++){
if(nums[i]==nums[i-1])time[index].cnt++;
else{
time[++index].num = nums[i];
time[index].cnt = 1;
}
}
qsort(time,index+1,sizeof(struct Times),cmps);
for(int i=0;i<k;i++){
res[i] = time[i].num;
}
return res;
}