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

leetcode-10/9【堆相关】

1.数组中的第K个最大元素【215】

思路:
        1.1.要使得时间复杂度为O(n),自己实现大顶堆,通过K次调整,顶部元素就是想要的第K个最大元素

        1.2.实现大顶堆的过程中,先建堆,建堆是利用递归,本质上是从下到上地进行大顶堆的调整,因为如果从上到下,只能实现局部的大顶堆,有可能会漏掉一些元素没调整

        1.3.叶子节点本身就满足大顶堆的性质,所以不需要调整,只需要从倒数第2排进行调整即可,即heapSize / 2 - 1

        1.4.对于某个堆进行调整的时候,判断左子树2 * i + 1,右子树 2 * i + 2,和根节点i,如果左右子树有比i的值大的,取更大的作为largest最大节点,与根节点进行交换,并且递归地调整largest位置的子树符合大顶堆的性质。注意!!交换的只是值,但是largest索引没变,其子树还是原来位置的子树

2. 前K个高频元素

思路:
        2.1. 先用哈希表对元素以及元素出现的次数进行存储,之后对value即出现次数进行排序即可

        2.2.要求算法时间复杂度优于O(nlogn),我采用堆排序,利用PriorityQueue优先队列,定义排序器规则,实现小顶堆。由此,最小的元素在队列首部

        2.3.取前K个高频元素,因此优先队列实现的堆的大小为K即可

        2.4.有新的元素来的时候,如果大小小于K,就直接进入队列;否则,如果小顶堆顶部元素小于新的元素,则将顶部元素弹出,新元素进入队列。且PriorityQueue会自动按照排序器规则调整小顶堆

http://www.lryc.cn/news/458692.html

相关文章:

  • 自然语言处理问答系统:技术进展、应用与挑战
  • 向量数据库!AI 时代的变革者还是泡沫?
  • vue中css作用域及深度作用选择器的用法
  • LLM - 使用 ModelScope SWIFT 测试 Qwen2-VL 的 LoRA 指令微调 教程(2)
  • 2024 年热门前端框架对比及选择指南
  • map_server
  • 无人机航拍视频帧处理与图像拼接算法
  • 搬砖11、Python 文件和异常
  • 24.6 监控系统在采集侧对接运维平台
  • refresh-1
  • 如何写好一篇计算机应用的论文?
  • 工业 5.0 时代的数字孪生:迈向高效和可持续的智能工厂
  • Python脚本之获取Splunk数据发送到第三方UDP端口
  • Protobuf:复杂类型接口
  • Git Push 深度解析:命令的区别与实践
  • 大数据开发基础实训室设备
  • 【数据结构】string(C++模拟实现)
  • 【笔记】I/O总结王道强化视频笔记
  • XML XSLT:转换与呈现数据的力量
  • ES6总结
  • 晶体匹配测试介绍
  • 超声波清洗机靠谱吗?适合学生党入手的四款眼镜清洗机品牌推荐!
  • Java生成图片_基于Spring AI
  • 程序传入单片机的过程,以Avrdude为例分析
  • 用YOLO和LLM增强的OCR
  • 开源的云平台有哪些?
  • Spring Boot学习资源库:微服务架构的加速器
  • Pi4+wfb-ng+8812au
  • 基于单片机的非接触智能测温系统设计
  • 第二十三篇:网络拥塞了,TCP/IP如何解决的?