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

C语言 | Leetcode C语言题解之题451题根据字符出现频率排序

题目:

题解:

#define HASH_FIND_CHAR(head, findint, out) HASH_FIND(hh, head, findint, sizeof(char), out)
#define HASH_ADD_CHAR(head, intfield, add) HASH_ADD(hh, head, intfield, sizeof(char), add)struct HashTable {char key;int val;UT_hash_handle hh;
};char* frequencySort(char* s) {struct HashTable* hashTable = NULL;int maxFreq = 0;int length = strlen(s);for (int i = 0; i < length; i++) {struct HashTable* tmp;HASH_FIND_CHAR(hashTable, &s[i], tmp);if (tmp == NULL) {tmp = malloc(sizeof(struct HashTable));tmp->key = s[i], tmp->val = 1;HASH_ADD_CHAR(hashTable, key, tmp);maxFreq = fmax(maxFreq, 1);} else {maxFreq = fmax(maxFreq, ++tmp->val);}}char* buckets[maxFreq + 1];int bucketsSize[maxFreq + 1];memset(bucketsSize, 0, sizeof(bucketsSize));int retSize = 0;struct HashTable *tmp, *iter;HASH_ITER(hh, hashTable, iter, tmp) {bucketsSize[iter->val]++;retSize += iter->val;}for (int i = 1; i <= maxFreq; i++) {buckets[i] = malloc(sizeof(char) * bucketsSize[i]);}memset(bucketsSize, 0, sizeof(bucketsSize));HASH_ITER(hh, hashTable, iter, tmp) {buckets[iter->val][bucketsSize[iter->val]++] = iter->key;}char* ret = malloc(sizeof(char) * (retSize + 1));retSize = 0;for (int i = maxFreq; i > 0; i--) {char* bucket = buckets[i];for (int j = 0; j < bucketsSize[i]; j++) {for (int k = 0; k < i; k++) {ret[retSize++] = bucket[j];}}}ret[retSize] = '\0';return ret;
}

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

相关文章:

  • 可视化图表与源代码显示配置项及页面的动态调整功能分析
  • C++ | Leetcode C++题解之第451题根据字符出现频率排序
  • Linux 实用工具Axel安装及使用教程(支持多线程下载)
  • SD-WebUI forge支持flux模型。算力互联forge镜像使用教程
  • Unity Input System自动生成配置
  • AccessoriesqueryController
  • Difference of Convex Relaxation (DC)
  • 基于深度学习的任务序列中的快速适应
  • Hive数仓操作(十)
  • 课设实验-数据结构-线性表-手机销售
  • 2024多模态大模型发展调研
  • buuctf--->Youngter-drive
  • 复习HTML(基础)
  • 重置linux后vscode无法再次使用ssh连接
  • 【ShuQiHere】深入理解 LC-3 指令集架构(LC-3 ISA):硬件与软件的桥梁 ️
  • 华为OD机试真题---数大雁
  • 在Ubuntu 14.04上安装带SSL的Webmin的方法
  • profile-spec-ref元素
  • 【计算机毕业设计】springboot企业客户信息反馈平台
  • Linux基础命令parted详解