链接:https://leetcode.cn/problems/top-k-frequent-elements/solution/by-xun-ge-v-5oea/
示例思路
需要寻找出现次数最多的数
我们先对数组进行排序,然后将数组中出现的元素保存在结构体中,对数组进行简化
//定义结构体,记录数字及其出现的次数
struct Times{
int num;//数组元素
int cnt;//出现次数
};
保存自身元素和出现次数,最后再对结构体数组进行降序排序,寻找前k个元素进行输出
代码//定义结构体,记录数字及其出现的次数
struct Times{
int num;//数组元素
int cnt;//出现次数
};
//用于初始数组nums的排序
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;
//1.对初始数组nums进行排序
qsort(nums,numsSize,sizeof(int),cmp);
//2.遍历计算各个数字出现的次数
time[index].num = nums[0];
time[index].cnt = 1;
for(int i=1;i
时间空间复杂度



