首页 > 其他分享 >LeetCode:347.前K个高频元素

LeetCode:347.前K个高频元素

时间:2025-01-14 22:57:15浏览次数:1  
标签:map val len item 347 heap ind 高频 LeetCode

LeetCode:347.前K个高频元素

var topKFrequent = function(nums, k) {
    let map=new Map();
    let arr=[...new Set(nums)]
    nums.forEach(item=>{
        if(map.has(item)){
            map.set(item,map.get(item)+1)
        }else{
            map.set(item,1)
        }
    })
    return arr.sort((a,b)=>map.get(b)-map.get(a)).slice(0,k)
};

class MinHeap {
    constructor() {
      this.heap = []
      this.len = 0
    }
    size() {
      return this.len
    }
    push(val) {
      this.heap[++this.len] = val
      this.swin(this.len)
    }
  
    pop() {
      const ret = this.heap[1]
      this.swap(1, this.len--)
      this.heap[this.len + 1] = null
      this.sink(1)
      return ret
    }
    swin(ind) {
      while (ind > 1 && this.less(ind, parseInt(ind / 2))) {
        this.swap(ind, parseInt(ind / 2))
        ind = parseInt(ind / 2)
      }
    }
    sink(ind) {
      while (ind * 2 <= this.len) {
        let j = ind * 2
        if (j < this.len && this.less(j + 1, j)) j++
        if (this.less(ind, j)) break
        this.swap(ind, j)
        ind = j
      }
    }
    top() {
      return this.heap[1]
    }
    isEmpty() {
      return this.len === 0
    }
  
    swap(i, j) {
      [this.heap[i], this.heap[j]] = [this.heap[j], this.heap[i]]
    }
    less(i, j) {
      return this.heap[i].val < this.heap[j].val
    }
    getHeap() {
      return this.heap
    }
  }
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
var topKFrequent = function(nums, k) {
    let map=new Map();
    nums.forEach(item=>{
        if(map.has(item)){
            map.set(item,map.get(item)+1)
        }else{
            map.set(item,1)
        }
    })
    let h=new MinHeap();
    map.forEach((val,key)=>{
        h.push({val,key});
        if(h.size()>k) h.pop();
    })
    return h.heap.filter(item=>item&&item.val).map(item=>item.key);
};

标签:map,val,len,item,347,heap,ind,高频,LeetCode
From: https://www.cnblogs.com/KooTeam/p/18671853

相关文章

  • LeetCode:40.组合总和II
    跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!代码随想录LeetCode:40.组合总和II给定一个候选人编号的集合candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每......
  • LeetCode - #183 Swift 实现查询未下订单的客户
    网罗开发(小红书、快手、视频号同名)  大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、HarmonyOS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源......
  • 【LeetCode 刷题】二分搜索
    此博客作为《代码随想录》的学习笔记,主要内容为二分搜索法及相关题目解析。文章目录704.二分查找35.搜索插入位置34.在排序数组中查找元素的第一个和最后一个位置69.x的平方根367.有效的完全平方数以下所有二分法算法均基于左闭右闭区间704.二分查找LeetCode......
  • CTP接口实现高频程序化交易 技术要点 风险控制与合规性全解析
    炒股自动化:申请官方API接口,散户也可以python炒股自动化(0),申请券商API接口python炒股自动化(1),量化交易接口区别Python炒股自动化(2):获取股票实时数据和历史数据Python炒股自动化(3):分析取回的实时数据和历史数据Python炒股自动化(4):通过接口向交易所发送订单Python炒股自动化(5):......
  • leetcode 刷题
    现有一个记作二维矩阵 frame 的珠宝架,其中 frame[i][j] 为该位置珠宝的价值。拿取珠宝的规则为:只能从架子的左上角开始拿珠宝每次可以移动到右侧或下侧的相邻位置到达珠宝架子的右下角时,停止拿取注意:珠宝的价值都是大于0的。除非这个架子上没有任何珠宝,比如 frame=[......
  • LeetCode:215.数组中的第K个最大元素
    LeetCode:215.数组中的第K个最大元素解题思路看到“第K个最大元素”。考虑选择使用最小堆。解题步骤构建一个最小堆,并依次把数组的值插入堆中。当堆的容量超过K,就删除堆顶。插入结束后,堆顶就是第K个最大元素。leetcode在线运行测试可能是用本地环境跑分...有缓存卡大数有er......
  • leetcode刷题记录(java)——参考代码随想录:数组 链表 哈希表
    四、题目之:代码随想录https://programmercarl.com/(1)代码随想录:数组704.二分查找classSolution{publicintsearch(int[]nums,inttarget){if(target<nums[0]||target>nums[nums.length-1]){return-1;}intleft=0......
  • LeetCode Top Interview 150 - Stack
    Somescenarioswhereastackistypicallytheappropriatedatastructuretouse:1.ParenthesesMatching:Problemsthatrequirecheckingforbalancedparenthesesorbracketsoftenutilizestackstoensurethateveryopeningbrackethasacorrespondingclo......
  • LeetCode 热题 HOT 100
    点个关注,不迷路!(╯▽╰)好香~~在学习过程中,借助一些优秀的工具可以极大地提升我们的学习效率。例如,使用LeetCode插件,它能够帮助你显示力扣周赛难度分数,让你更好地了解题目的难度,从而合理安排学习计划。算法学习路线推荐基础夯实:先过B站“灵茶山艾府”的“基础算法......
  • leetcode周赛432 T4(单调栈 + 单调队列)
    一道练习单调栈+单调队列的好题题目链接:problem对于求合法子数组数量的题目,可以先考虑传统的枚举右端点,二分左端点的套路。此题用这种方法恰好可行,因为对于一个序列,左端增加一个数不会让操作数更少。因此对于固定右端点,合法的左端点一定是一段区间。所以现在问题转化为:用双指......