当前位置: 首页 > 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.mrgr.cn/news/46014.html

相关文章:

  • CAN与CANFD的区别
  • 图示详解OpenEuler下 DNS安装、配置与测试
  • 头疼来袭?别急,这份自救指南让你秒变“不痛达人”!
  • Java—逻辑控制与输入输出
  • 人脸识别face-api.js应用简介
  • 安全气囊系统(ACU)详细分析
  • SDUT数据结构与算法第二次机测
  • 全国消防知识竞赛活动方案哪家强
  • 昇思MindSpore进阶教程--数据处理性能优化(上)
  • easyexcel多sheet导出(唯一能用)
  • .net core API中使用LiteDB
  • 学习threejs,添加户外光照光源
  • 回溯算法之图的作色问题详细解读(附带Java代码解读)
  • 有些类也需计划生育——单例模式
  • 深入探索与实践:抖音商品详情接口的高效调用与数据处理技术
  • BP神经网络的有标签分类Matlab代码
  • 构建高效数据处理桥梁:探索基于数据库驱动的自定义TypeHandler解决方案
  • Springboot——使用poi实现excel动态图片导入解析
  • 【习题】应用UX体验标准
  • Spring Boot 应用开发案例:在线书籍管理系统