/*
* 算法思想:
* 构建带权值哈希表,权值为出现次数;
* 1. 首先排序,方便构建哈希表,使相同的值相邻;
* 2. 排序哈希表,以哈希表的权值出现次数为排序元素;
* 3. 从哈希表中提取k个排序结果即可。
**/
int cmp(int *a, int *b){
return *a - *b;
}
int cmp_node(int *a, int *b){
return a[1] - b[1];
}
int* topKFrequent(int* arr, int len, int k, int* returnSize){
qsort(arr, len, sizeof(int), cmp);
int *ret = (int *)malloc(sizeof(int) * k);
int hash[len][2];
int i, index=0;
int ret_index = 0;
memset(hash, 0, sizeof(hash));
for(i=0; i<len; i++){
if(i==0 || hash[index][0] != arr[i]){
if(i!=0) index++;
hash[index][0] = arr[i];
}
hash[index][1]++;
}
qsort(hash, index+1, sizeof(int)*2, cmp_node);
for(i=index; i>=0 && ret_index<k; i--){
ret[ret_index++] = hash[i][0];
}
*returnSize = k;
return ret;
}
LeetCode-347-前K个高频元素-C语言
最新推荐文章于 2022-07-02 00:56:26 发布