当前位置: 首页 > news >正文

C语言 | Leetcode C语言题解之第347题前K个高频元素

题目:

题解:

struct hash_table {int key;int val;// 查看 https://troydhanson.github.io/uthash/ 了解更多UT_hash_handle hh;
};typedef struct hash_table* hash_ptr;struct pair {int first;int second;
};void swap(struct pair* a, struct pair* b) {struct pair t = *a;*a = *b, *b = t;
}void sort(struct pair* v, int start, int end, int* ret, int* retSize, int k) {int picked = rand() % (end - start + 1) + start;swap(&v[picked], &v[start]);int pivot = v[start].second;int index = start;for (int i = start + 1; i <= end; i++) {// 使用双指针把不小于基准值的元素放到左边,// 小于基准值的元素放到右边if (v[i].second >= pivot) {swap(&v[index + 1], &v[i]);index++;}}swap(&v[start], &v[index]);if (k <= index - start) {// 前 k 大的值在左侧的子数组里sort(v, start, index - 1, ret, retSize, k);} else {// 前 k 大的值等于左侧的子数组全部元素// 加上右侧子数组中前 k - (index - start + 1) 大的值for (int i = start; i <= index; i++) {ret[(*retSize)++] = v[i].first;}if (k > index - start + 1) {sort(v, index + 1, end, ret, retSize, k - (index - start + 1));}}
}int* topKFrequent(int* nums, int numsSize, int k, int* returnSize) {hash_ptr head = NULL;hash_ptr p = NULL, tmp = NULL;// 获取每个数字出现次数for (int i = 0; i < numsSize; i++) {HASH_FIND_INT(head, &nums[i], p);if (p == NULL) {p = malloc(sizeof(struct hash_table));p->key = nums[i];p->val = 1;HASH_ADD_INT(head, key, p);} else {p->val++;}}struct pair values[numsSize];int valuesSize = 0;HASH_ITER(hh, head, p, tmp) {values[valuesSize].first = p->key;values[valuesSize++].second = p->val;}int* ret = malloc(sizeof(int) * k);*returnSize = 0;sort(values, 0, valuesSize - 1, ret, returnSize, k);return ret;
}

http://www.mrgr.cn/news/1985.html

相关文章:

  • Linux CentOS java JDK17
  • 给RAG系统做一次全面「体检」,亚马逊开源RAGChecker诊断工具
  • 前端框架(三件套)
  • ArcGIS如何将投影坐标系转回为地理坐标系
  • 斗破C++编程入门系列之五:算法的基本控制结构之选择结构
  • 算法笔记|Day29动态规划II
  • 面试题提升—浏览器+网络部分高频面试题
  • Android的日志工具Log
  • potplayer播放m2ts格式,截图
  • go语言中数据接口set集合的实现
  • Element-03.组件-Pagination分页
  • 【k8s】master节点重新安装docker-ce
  • Visual Studio 2022 v17.11 发布
  • 后端开发刷题 | 链表内指定区间反转【链表篇】
  • 第6章 Android应用资源
  • 【EI会议】第三届环境工程与可持续能源国际会议征稿开启
  • 做跨境,东南亚市场要做哪些准备!
  • 【无标题】playbook的基本使用
  • Unity3D 自定义窗口
  • C语言——字符函数、字符串函数和内存函数