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

虎牙Android面试题及参考答案

给个数组,找出数组中第 k 大的数(利用快排思想 / 用小顶堆,他说可以用大顶堆?)

  • 利用快排思想:快速排序的核心思想是分治和分区。在找数组中第 k 大的数时,每次选择一个基准元素,将数组分为两部分,左边部分小于基准元素,右边部分大于基准元素。如果基准元素最终的下标是 n - kn 是数组长度),那么这个基准元素就是第 k 大的数。如果基准元素的下标小于 n - k,说明第 k 大的数在基准元素右边的部分,继续在右边部分进行分区操作;如果基准元素的下标大于 n - k,则在基准元素左边的部分继续进行分区操作。这种方法的平均时间复杂度为 ,最坏情况下时间复杂度为 ,空间复杂度为 (递归调用栈的空间)。
  • 利用小顶堆:首先创建一个大小为 k 的小顶堆,将数组中的前 k 个元素放入小顶堆中。然后从第 k + 1 个元素开始遍历数组,如果当前元素大于小顶堆的堆顶元素,则将堆顶元素弹出,把当前元素插入小顶堆。遍历完整个数组后,小顶堆的堆顶元素就是数组中第 k 大的数。时间复杂度为 ,空间复杂度为 ,因为需要维护一个大小

http://www.kler.cn/a/354794.html

相关文章:

  • 嵌入式入门Day35
  • WFP Listbox绑定数据后,数据变化的刷新
  • 网络安全 | 物联网安全:从设备到网络的全方位防护
  • 在 IntelliJ IDEA 中开发 GPT 自动补全插件
  • 【基础代数】概述与导论
  • PLC(01)
  • C++ 方法积累
  • 【优选算法】(第三十六篇)
  • 【实战案例】Nacos从安装到服务注册发现再到配置中心(附常见问题解决方案)
  • 前端开发设计模式——状态模式
  • 【AIGC】寻找ChatGPT最佳推理步骤:CoT思维链技术的探索与应用
  • C# 将PDF文档转换为Markdown文档
  • Go语言Gin框架调用企业微信接口根据手机号获取userid
  • 滚雪球学Redis[7.3讲]:Redis在排行榜系统中的应用:高效构建与优化
  • 【C++刷题】力扣-#136-只出现一次的数字
  • FPGA基于SRIO Auraro 三速以太网 IIC SPI等多协议的高速传输处理项目
  • AOT漫谈专题(第三篇): 如何获取C#程序的CPU利用率
  • 前端常用算法和数据结构
  • 推动实验室数字化,LIMS主要功能及优势
  • k8s中的微服务
  • 【C语言】递归函数变量的作用域
  • Elasticsearch(二)集成Spring Boot 基本的API操作
  • oracle实例宕机,虚拟机磁盘精简配置模式,磁盘无法扩展
  • C++ 内存管理 对比C语言动态内存管理;operator new和delete
  • 洛谷 P1803:凌乱的yyy / 线段覆盖 ← 贪心算法
  • (C/C++)文件