struct hash_table {
int val;
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 hash_table*)b).cnt - (*(struct hash_table*)a).cnt;
}
int* topKFrequent(int* nums, int numsSize, int k, int* returnSize){
int* ans = malloc(sizeof(int) * k);
*returnSize = k;
qsort(nums, numsSize, sizeof(int), cmp);
struct hash_table a[numsSize];
int index = 0;
a[index].val = nums[index];
a[index].cnt = 1;
for (int i = 1; i < numsSize; ++i) {
if (nums[i] == nums[i - 1]) {
a[index].cnt++;
} else {
a[++index].val = nums[i];
a[index].cnt = 1;
}
}
qsort(a, index + 1, sizeof(struct hash_table), cmps);
for (int i = 0; i < k; ++i) {
ans[i] = a[i].val;
}
return ans;
}