赞
踩
/* * 算法思想: * 构建带权值哈希表,权值为出现次数; * 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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。