[leetcode]347. Top K Frequent Elements -- JavaScript 代码
来源:互联网 发布:网络贷款系统 编辑:程序博客网 时间:2024/06/12 20:23
/** * @param {number[]} nums * @param {number} k * @return {number[]} */var topKFrequent = function(nums, k) { function Node(n,c){ this.num = n; this.count = c; } var len = nums.length; var dataMap = {}; for(var i=0;i<len;i++){ if(dataMap[nums[i]] === undefined){ dataMap[nums[i]] = new Node(nums[i],1); }else{ dataMap[nums[i]].count++; } } var array = []; for(var key in dataMap){ array.push(dataMap[key]); } array.heapSort(); len = array.length; var ret=[]; for(i=0;i<k;i++){ var j = len-1-i; ret.push(array[j].num); } return ret;};// 堆排序算法:大根堆调整出的其实是从小到大排列的数组。Array.prototype.buildMaxHeap=function(){ for(var i=Math.floor(this.length/2)-1;i>=0;i--){ this.heapAdjust(i,this.length); }};Array.prototype.swap=function(i,j){ var tmp=this[i]; this[i]=this[j]; this[j]=tmp;};Array.prototype.heapSort=function(){ this.buildMaxHeap(); for(var i=this.length-1;i>0;i--){ this.swap(0,i); this.heapAdjust(0,i); } return this;};Array.prototype.heapAdjust=function(i,j){ var largest=i; var left=2*i+1; var right=2*i+2; if(left<j&&this[largest].count<this[left].count){ largest=left; } if(right<j&&this[largest].count<this[right].count){ largest=right; } if(largest!=i){ this.swap(i,largest); this.heapAdjust(largest,j); }};
这道题代码比较长,需要注意的部分包括3个:
第一,使用Node类型来保存数据,不仅需要保存元素,还需要保存元素出现的次数。
第二,使用map来记录和整理原始数据nums。
第三,使用堆排序来保证时间复杂度符合要求。
0 0
- [leetcode]347. Top K Frequent Elements -- JavaScript 代码
- LeetCode #347. Top K Frequent Elements
- [leetcode] 347. Top K Frequent Elements
- LeetCode 347. Top K Frequent Elements
- <LeetCode OJ> 347. Top K Frequent Elements
- LeetCode 347. Top K Frequent Elements
- Leetcode 347. Top K Frequent Elements
- LeetCode Everyday: 347. Top K Frequent Elements
- 【leetcode】347. Top K Frequent Elements
- leetcode 347.Top K Frequent Elements
- leetcode 347. Top K Frequent Elements
- leetcode 347. Top K Frequent Elements
- [leetcode]347. Top K Frequent Elements
- LeetCode-347.Top K Frequent Elements
- Leetcode 347.Top K Frequent Elements
- Leetcode 347. Top K Frequent Elements
- 【LeetCode】347. Top K Frequent Elements
- [leetcode] 347. Top K Frequent Elements
- GATT两个角色 服务器与客户端
- STM32F10X便利的GPIO驱动设计(C++,基于基础库)
- 欢迎使用CSDN-markdown编辑器
- kafka + spark streaming 架构
- CoreData完整使用教程
- [leetcode]347. Top K Frequent Elements -- JavaScript 代码
- The partial sum problem
- MyEclipse非常方便的快捷键
- [bzoj1082][二分]栅栏
- Python面向对象02
- 使用phonegap获取位置信息
- C语言系列(七)文件的相关操作
- 中兴笔试编程题总结
- .net framework 打包进 msi安装包,使得安装时自动安装