力扣347. 前 K 个高频元素(JavaScript,堆)
//小顶堆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,堆)相关推荐
- 力扣347 前 K 个高频元素 -- JS
347. 前 K 个高频元素 - 力扣(LeetCode) (leetcode-cn.com) 一:使用对象进行解题,对象的属性为给定数组的元素,属性值为给定数组元素出现的次数: 二:把对象转成数组, ...
- 力扣347.前 K 个高频元素(优先队列)
347. 前 K 个高频元素 本题的关键点是对map中的value进行排序. 题目中涉及前几个,考虑优先队列 优先队列要通过lamda表达式写清楚是大数在顶还是小数在顶 逆序: PriorityQue ...
- 力扣 347. 前 K 个高频元素
题目 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 输入: nums = [1,1,1,2,2,3], k = 2 输出: ...
- leetcode(力扣) 347. 前 K 个高频元素(优先队列 堆 哈希计数器)
文章目录 题目描述 思路分析 法一( 哈希计数): 法二(堆): 完整代码 题目描述 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. ...
- leetcode力扣347. 前 K 个高频元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], ...
- 力扣347——前K个高频元素
题目描述 给定一个数组,求前 k 个最频繁的数字. 输入输出样例 输入是一个数组和一个目标值 k.输出是一个长度为 k 的数组. Input: nums = [1,1,1,1,2,2,3,4], k ...
- 模拟卷Leetcode【普通】347. 前 K 个高频元素
347. 前 K 个高频元素 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 1: 输入: nums = [1,1,1,2,2 ...
- 【LeetCode】【HOT】347. 前 K 个高频元素(哈希表+优先队列)
[LeetCode][HOT]347. 前 K 个高频元素 文章目录 [LeetCode][HOT]347. 前 K 个高频元素 package hot;import java.util.Arrays ...
- LeetCode——347. 前 K 个高频元素【最小堆实现】
LeetCode--347. 前 K 个高频元素[最小堆实现] 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例1: 输入: n ...
最新文章
- python翻译文档地址
- 首次公开:京东数科强一致、高性能分布式事务中间件 JDTX
- spring mysql 注解_【Spring】SpringMVC之基于注解的实现SpringMVC+MySQL
- vs code 添加jquery的智能提示
- Airdoc创始人:工智能可以在医疗领域多个环节发挥作用 但有局限性
- python使用redis做缓存_Python中的Redis客户端缓存(二)
- python网络编程知识点_python 网络编程要点
- 李开复:人工智能行业发展与投资趋势
- Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are解决方法
- Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
- 从金钱社会向财富第三极的过渡方案
- ajax 传json数组对象,ajax传递json数组
- 如何加声调口诀_汉语拼音声调标注口诀
- 电脑开机加速,一下子就提升了20几秒
- Arbitrary Shape Scene Text Detection with Adaptive Text Region Representation ----论文翻译
- eclipse中ctrl+D失效的解决方案
- linux下搜狗安装目录,搜狗输入法Linux版配置文件详解
- 易语言模块及DLL动态链接库编写
- 《LoadRunner 12七天速成宝典》—第1章 1.2节环境搭建之虚拟机系统
- kafak 简单概念
热门文章
- qq消息服务器延时,QQ聊天消息丢失或延迟的原因分析
- python中print不显示结果_Python中的print()函数
- java 二叉排序_java实现二叉排序树
- 基于JAVA+SpringBoot+Mybatis+MYSQL的药房药品管理系统
- 基于JAVA+SpringMVC+MYSQL的超市进销存
- 基于JAVA+Servlet+JSP+MYSQL的个人博客系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的培训中心管理系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的线上电器商城
- [BZOJ5329][Sdoi2018]战略游戏 圆方树+虚树
- Java实现的词频统计