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.mzph.cn/news/877481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YUM和NFS

文章目录 yum软件仓库的提供方式RPM软件包的来源Linux系统各家厂商用的安装源命令---yum 配置本地yum源具体操作 搭建ftp yum仓库环境具体操作实操环境服务端一、安装 vsftpd服务二、创建一个文件&#xff0c;并且挂载三、开启服务四、查看挂载 客户端五、备份六、搭建ftp yum仓…

【联想电脑】:使用拓展坞后转接HDMI,无法识别显示屏

项目场景&#xff1a; 作为一个嵌入式软件开发者&#xff0c;有两个外接屏幕&#xff0c;不足为奇。 但是在今天的使用电脑过程中&#xff0c;出现了接了一个拓展坞上面有HDMI接口&#xff0c;但是HDMI接口接上外接显示屏的时候电脑无法识别到&#xff0c;导致只有电脑直连的HD…

使用Docker-compose一键部署Wordpress平台

一、Docker-compose概述&#xff1a; docker-compose&#xff1a;单机容器编排 Dockerfile&#xff1a;先配置好文件&#xff0c;然后build&#xff0c;镜像——>容器。 docker-compose&#xff1a;即可基于Dockerfile&#xff0c;也可以基于镜像&#xff0c;可以一键式拉…

安全基础学习-SM4加密算法

SM4 是一种中国国家密码标准(GB/T 32907-2016)中定义的分组加密算法,又称为“中国商用密码算法SM4”。它是由中国国家密码管理局发布的,并广泛应用于金融、电子商务和其他需要数据加密的场景。 1、SM4 算法概述 SM4 是一种对称加密算法,意味着加密和解密使用相同的密钥。…

使用WINUI3 编写一个小软件1 C#

本篇主要是记录安装和运行的问题。 先说安装 因为我是WIN11&#xff0c;所以勾了&#xff0c;如果你是WIN10就不用勾选11那个&#xff0c;但是我不确定用11要不要10那个&#xff0c;所以就勾了&#xff0c;按安装手册来的。 2、创建项目 照着选就完事了&#xff0c;别选错 这…

【数据结构与算法】快速排序

快速排序目录 一.快速排序的原理二.快速排序的图解三.快速排序的实现1.基准两边分2.分而治之 四.完整代码 一.快速排序的原理 每次选取第一个数为基准数.然后使用乾坤大挪移将大于或者小于基准的元素分别放置于基准数两边.继续分别对基准数两侧未排序的数据使用分治法进行处理…

springboot项目配置https安装ssl证书教程

1.将下载的ssl证书文件中的jks后缀文件放在/src/main/resource文件夹里面 2.在配置文件中&#xff08;yml后缀配置文件的格式不同&#xff09;添加如下配置即可

Postman接口测试项目实战

第 1 章 什么是接口测试 1.1、为什么要进行接口测试 目前除了特别Low的公司外&#xff0c;开发都是前后端分离的&#xff0c;就是说前端有前端的工程师进行编码&#xff0c;后端有后端的工程师进行编码&#xff0c;前后端进行数据基本都是通过接口进行交互的。 1.2、接口测…

IDEA:如何在idea中设置自动导包

这里使用的是idea2020版本,但是不同版本操作不会有较大的差别. 在Editer中展开General之后,选中Auto Import,最后勾选中Add unambiguous imports on the fly.

Java Web|day5.MyBatis

MyBatis 定义 它是一款半自动的ORM持久层框架&#xff0c;具有较高的SQL灵活性&#xff0c;支持高级映射(一对一&#xff0c;一对多)&#xff0c;动态SQL&#xff0c;延迟加载和缓存等特性&#xff0c;但它的数据库无关性较低 **ORM: **Object Relation Mapping&#xff0c;…

培训学校课程管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

Java面试--框架--Spring MVC

Spring MVC 目录 Spring MVC1.spring mvc简介2.spring mvc实现原理2.1核心组件2.2工作流程 3.RESTful 风格4.Cookie&#xff0c;Session4.1 会话4.2 保存会话的两种技术 5.拦截器5.1过滤器、监听器、拦截器的对比5.2 过滤器的实现5.3 拦截器基本概念5.4 拦截器的实现 1.spring …

如何使用unittest和pytest进行python脚本的单元测试

1. 关于unittest和pytest unittest是python内置的支持单元测试的模块&#xff0c;他提供了核心类&#xff0c;TestCase&#xff0c;让单元测试 代码的编写不再是从0开始&#xff0c;不再是作坊式&#xff0c;而是标准化&#xff0c;模板化&#xff0c;工厂化。 pytest是第三方…

【深度解析】WRF-LES与PALM微尺度气象大涡模拟

查看原文>>>【深度解析】WRF-LES与PALM微尺度气象大涡模拟 针对微尺度气象的复杂性&#xff0c;大涡模拟&#xff08;LES&#xff09;提供了一种无可比拟的解决方案。微尺度气象学涉及对小范围内的大气过程进行精确模拟&#xff0c;这些过程往往与天气模式、地形影响和…

Linux - 模拟实现 shell 命令行解释器

目录 简介 shell 的重要性 解释为什么学习 shell 的工作原理很重要 模拟实现一个简单的 shell 循环过程 1. 获取命令行 2. 解析命令行 3. 建立一个子进程&#xff08;fork&#xff09; 4. 替换子进程&#xff08;execvp&#xff09; 5. 父进程等待子进程退出&#xff08;wai…

合宙LuatOS AIR700 IPV6 TCP 客户端向NodeRed发送数据

为了验证 AIR700 IPV6 &#xff0c;特别新建向NodeRed Tcp发送的工程。 Air700发送TCP数据源码如下&#xff1a; --[[ IPv6客户端演示, 仅EC618系列支持, 例如Air780E/Air600E/Air780UG/Air700E ]]-- LuaTools需要PROJECT和VERSION这两个信息 PROJECT "IPV6_SendDate_N…

Jupyter安装指南:最简便最详细的步骤

一.介绍 JupyterNotebook 是一个款以网页为基础的交互计算环境&#xff0c;可以创建Jupyter的文档&#xff0c;支持多种语言&#xff0c;包括Python, Julia, R等等。一般来说&#xff0c;如果是使用R语言的话&#xff0c;使用Rstudio居多&#xff0c;使用Python的话&#xff0…

开源的数据库增量订阅和消费的中间件——Cancl

目录 工作原理 MySQL主备复制原理 Canal 工作原理 主要功能和特点 应用场景 实验准备 安装JDK11 下载MySQL8.0 配置canal.admin 配置canal-deployer 测试数据读取 新增一台主机用做被同步的目标机器测试 官方地址&#xff1a;https://github.com/alibaba/canal?ta…

【gitlab】gitlab-ce:17.3.0-ce.0 1:使用docker engine安装

ce版本必须配置代理。 极狐版本可以直接pull 社区版GitLab不支持Alibaba Cloud Linux 3,本操作以Ubuntu/Debian系统为例进行说明,其他操作系统安装说明,请参见安装社区版GitLab。 docker 环境重启 sudo systemctl daemon-reload sudo systemctl restart docker脚本安装 安裝…

宝塔面板实现定时任务删除 logs文件 加条件删除 只删除一个月前的日志

我们在开发中难免用到了日志功能&#xff0c;随着日志越来越多导致占用我们的内存 下面是一个简单的 使用宝塔面板里面的定时任务来实现删除日志案例 第一步 首先我的日志文件目录 都在log文件夹里面&#xff0c; 每个月生成一个日志文件夹 文件夹命名是年月来命名的 第二…