//小顶堆class MinHeap{constructor(){this.heap=[]}//交换节点swap(i1,i2){[this.heap[i1],this.heap[i2]]=[this.heap[i2],this.heap[i1]]}//父节点下标,i是子节点的下标getParent(i){return (i-1)>>1}//左节点getleft(i){return 2*i+1}//右节点getright(i){return 2*i+2}//添加的时候,加入在最后一个节点,需要上移//index为最后一个节点的下标up(index){//如果加入的是第一个的位置,则不需要上移if(index===0){return  }//获得当前节点的父元素的下标const p=this.getParent(index)//如果父节点存在且父节点次数大于当前次数if(this.heap[p]&&this.heap[p].count>this.heap[index].count){this.swap(p,index)this.up(p)}}//如果是删除操作,则需要执行下移down(index){//与最小的子节点交换const l=this.getleft(index)const r=this.getright(index)if((this.heap[l] && this.heap[l].count < this.heap[index].count)||(this.heap[r] && this.heap[r].count < this.heap[index].count)){if(this.heap[r]&&this.heap[r].count<this.heap[l].count){this.swap(index,r)this.down(r)}else{this.swap(index,l)this.down(l)}}}//添加insert(val){this.heap.push(val)  //加入在堆的最后this.up(this.heap.length-1)}//删除堆顶元素pop(){//把最后一个放在第一个this.heap[0]=this.heap.pop()this.down(0)}//获取堆顶top(){return this.heap[0]}//获取堆的大小size(){return this.heap.length}}var topKFrequent = function(nums, k) {const map = new Map();//统计key字符和value次数for(const num of nums) {map.set(num, (map.get(num) || 0) + 1);}//创建小顶堆const minh=new MinHeap()// 遍历map,将{num, count}入堆// 若堆元素大于k,堆顶弹出for(const [num,count] of map){//把map的一个对象作为一个参数minh.insert({num,count})if(minh.size()>k){minh.pop()}}return minh.heap.map(item=>item.num)
};

力扣347. 前 K 个高频元素(JavaScript,堆)相关推荐

  1. 力扣347 前 K 个高频元素 -- JS

    347. 前 K 个高频元素 - 力扣(LeetCode) (leetcode-cn.com) 一:使用对象进行解题,对象的属性为给定数组的元素,属性值为给定数组元素出现的次数: 二:把对象转成数组, ...

  2. 力扣347.前 K 个高频元素(优先队列)

    347. 前 K 个高频元素 本题的关键点是对map中的value进行排序. 题目中涉及前几个,考虑优先队列 优先队列要通过lamda表达式写清楚是大数在顶还是小数在顶 逆序: PriorityQue ...

  3. 力扣 347. 前 K 个高频元素

    题目 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 输入: nums = [1,1,1,2,2,3], k = 2 输出: ...

  4. leetcode(力扣) 347. 前 K 个高频元素(优先队列 堆 哈希计数器)

    文章目录 题目描述 思路分析 法一( 哈希计数): 法二(堆): 完整代码 题目描述 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. ...

  5. leetcode力扣347. 前 K 个高频元素

    给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], ...

  6. 力扣347——前K个高频元素

    题目描述 给定一个数组,求前 k 个最频繁的数字. 输入输出样例 输入是一个数组和一个目标值 k.输出是一个长度为 k 的数组. Input: nums = [1,1,1,1,2,2,3,4], k ...

  7. 模拟卷Leetcode【普通】347. 前 K 个高频元素

    347. 前 K 个高频元素 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 1: 输入: nums = [1,1,1,2,2 ...

  8. 【LeetCode】【HOT】347. 前 K 个高频元素(哈希表+优先队列)

    [LeetCode][HOT]347. 前 K 个高频元素 文章目录 [LeetCode][HOT]347. 前 K 个高频元素 package hot;import java.util.Arrays ...

  9. LeetCode——347. 前 K 个高频元素【最小堆实现】

    LeetCode--347. 前 K 个高频元素[最小堆实现] 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例1: 输入: n ...

最新文章

  1. python翻译文档地址
  2. 首次公开:京东数科强一致、高性能分布式事务中间件 JDTX
  3. spring mysql 注解_【Spring】SpringMVC之基于注解的实现SpringMVC+MySQL
  4. vs code 添加jquery的智能提示
  5. Airdoc创始人:工智能可以在医疗领域多个环节发挥作用 但有局限性
  6. python使用redis做缓存_Python中的Redis客户端缓存(二)
  7. python网络编程知识点_python 网络编程要点
  8. 李开复:人工智能行业发展与投资趋势
  9. Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are解决方法
  10. Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
  11. 从金钱社会向财富第三极的过渡方案
  12. ajax 传json数组对象,ajax传递json数组
  13. 如何加声调口诀_汉语拼音声调标注口诀
  14. 电脑开机加速,一下子就提升了20几秒
  15. Arbitrary Shape Scene Text Detection with Adaptive Text Region Representation ----论文翻译
  16. eclipse中ctrl+D失效的解决方案
  17. linux下搜狗安装目录,搜狗输入法Linux版配置文件详解
  18. 易语言模块及DLL动态链接库编写
  19. 《LoadRunner 12七天速成宝典》—第1章 1.2节环境搭建之虚拟机系统
  20. kafak 简单概念

热门文章

  1. qq消息服务器延时,QQ聊天消息丢失或延迟的原因分析
  2. python中print不显示结果_Python中的print()函数
  3. java 二叉排序_java实现二叉排序树
  4. 基于JAVA+SpringBoot+Mybatis+MYSQL的药房药品管理系统
  5. 基于JAVA+SpringMVC+MYSQL的超市进销存
  6. 基于JAVA+Servlet+JSP+MYSQL的个人博客系统
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的培训中心管理系统
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的线上电器商城
  9. [BZOJ5329][Sdoi2018]战略游戏 圆方树+虚树
  10. Java实现的词频统计