最小K个数(力扣面试题17.14)

embedded/2024/10/22 17:23:41/

本文采用的是大堆排序求最小的K个值。需要有堆的数据结构基础哦。

代码展示:


/*** Note: The returned array must be malloced, assume caller calls free().*/
void AdjustDown(int* parr,int n,int root)//向下调整
{int parent=root;int child = parent*2+1;while(child<n){if(child+1<n&&parr[child+1]>parr[child]){child++;}if(parr[parent]<parr[child]){int tem=parr[parent];parr[parent]=parr[child];parr[child]=tem;parent=child;child=parent*2+1;}else{break;}}
}
int* smallestK(int* arr, int arrSize, int k, int* returnSize){if(k==0){return NULL;}int* st=(int*)malloc(sizeof(int)*k);*returnSize=k;for(int i=0;i<k;i++){st[i]=arr[i];}for(int i=(k-2)/2;i>=0;i--)//向下调整形成大堆,(k-2)/2是求父亲节点{AdjustDown(st,k,i);}for(int i=k;i<arrSize;i++)//如果数组元素小于堆顶元素,则代替堆顶元素,再形成新的大堆{if(arr[i]<st[0]){st[0]=arr[i];AdjustDown(st,k,0);}}return st;
}

 值得注意的是,已知孩子节点求父亲节点的公式是:parent=(child-1)/2。


http://www.ppmy.cn/embedded/30626.html

相关文章

k8s笔记 | Ingress

安装Ingress 添加helm创库 Installation Guide - Ingress-Nginx Controller Ingress | Kubernetes 下载包 将 文件helm 放到 /usr/local/bin/ 并给到执行权限 # 添加可执行权限 chmod ux helm # 测试是否能运行 helm version# 结果 version.BuildInfo{Version:"v3.14…

uniapp 监听APP切换前台、后台插件 Ba-Lifecycle

监听APP切换前台、后台 Ba-Lifecycle 简介&#xff08;下载地址&#xff09; Ba-Lifecycle 是一款uniapp监听APP切换前台、后台的插件&#xff0c;简单易用。 截图展示 也可关注博客&#xff0c;实时更新最新插件&#xff1a; uniapp 常用原生插件大全 使用方法 在 script…

NLP自然语言处理和应用场景介绍

【A】NLP&#xff08;Natural Language Processing&#xff0c;自然语言处理&#xff09;是计算机科学与人工智能领域的一个分支&#xff0c;旨在让机器能够理解、解释、生成人类语言。它涵盖了语言文本的语法、语义、语用、语境等方面的处理。 NLP的具体应用场景包括但不限于…

华为云耀云服务器开放端口

博客主页&#xff1a;花果山~程序猿-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一.华为云控制台开放端口 寻找到安全组信息 2. 添加开放的端口信息 3. 检查是否成…

基于深度学习检测恶意流量识别框架(80+特征/99%识别率)

基于深度学习检测恶意流量识别框架 目录 基于深度学习检测恶意流量识别框架简要示例a.检测攻击类别b.模型训练结果输出参数c.前端检测页面d.前端训练界面e.前端审计界面&#xff08;后续更新了&#xff09;f.前端自学习界面&#xff08;自学习模式转换&#xff09;f1.自学习模式…

Java的逻辑控制和方法的使用介绍

前言 程序的逻辑结构一共有三种&#xff1a;顺序结构、分支结构和循环结构。顺序结构就是按代码的顺序来执行相应的指令。这里主要讲述Java的分支结构和循环结构&#xff0c;由于和C语言是有相似性的&#xff0c;所以这里只会提及不同点和注意要点~~ 注意在C语言中&#xff0c;…

前端 JS 异常那些事

前言 人无完人&#xff0c;所以代码总会出异常的&#xff0c;异常并不可怕&#xff0c;关键是怎么处理 什么是异常 程序发生了意想不到的情况&#xff0c;影响到了程序的正确运行 从根本上来说&#xff0c;异常就是一个普通的对象&#xff0c;其保存了异常发生的相关信息&a…

Linux如何redis清空缓存

通过命令清空缓存 登录redis redis-cli -h 127.0.0.1 -p 6379# 如果有密码需要下面这一步 auth 你的密码出现ok表示登录成功 查看所有key keys * 清空整个Redis服务器的数据 flushall