范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

面试高频系列TopK问题的多种解法冒泡排序ampampamp快速排序ampampamp优先队列

  文章描述
  该文章是公众号:宫水三叶 博主的文章,一位女神级别的算法大佬,文章大都是讲算法的,公众号广告基本没有,只分享算法心得,解题思路不要不要的,一句话很强,
  原文链接:https://mp.weixin.qq.com/s/zVon8BE7l80-RT5bWdKCxA题目描述
  这是 LeetCode 上的 「703. 数据流中的第 K 大元素」 ,难度为 「Easy」 。
  设计一个找到数据流中第 k 大元素的类(class)。
  注意是排序后的第 k 大元素,不是第 k 个不同的元素。
  请实现 KthLargest 类:  KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。  int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。
  示例:  输入: ["KthLargest", "add", "add", "add", "add", "add"] [[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]  输出: [null, 4, 5, 5, 8, 8]  解释: KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]); kthLargest.add(3);   // return 4 kthLargest.add(5);   // return 5 kthLargest.add(10);  // return 5 kthLargest.add(9);   // return 8 kthLargest.add(4);   // return 8
  提示:  1 <= k <=  0 <= nums.length <=   <= nums[i] <=   <= val <=  最多调用 add 方法 次  题目数据保证,在查找第 k 大元素时,数组中至少有 k 个元素  冒泡排序解法(TLE)
  每次调用  add  时先将数装入数组,然后遍历 k  次,通过找 k  次最大值来找到 Top K。
  代码:  class KthLargest {     int k;     List list = new ArrayList<>(10009);     public KthLargest(int _k, int[] _nums) {         k = _k;         for (int i : _nums) list.add(i);     }     public int add(int val) {         list.add(val);         int cur = 0;         for (int i = 0; i < k; i++) {             int idx = findMax(cur, list.size() - 1);             swap(cur++, idx);         }         return list.get(cur - 1);      }     int findMax(int start, int end) {         int ans = 0, max = Integer.MIN_VALUE;         for (int i = start; i <= end; i++) {             int t = list.get(i);             if (t > max) {                 max = t;                 ans = i;             }         }         return ans;     }     void swap(int a, int b) {         int c = list.get(a);         list.set(a, list.get(b));         list.set(b, c);     } } 时间复杂度:  空间复杂度:  快速排序解法
  上述的解法时间复杂度是 的,当  k  很大的时候会超时。
  我们可以使用快排来代替冒泡。
  将复杂度变为 ,不能说 复杂度一定比 要低,但 通常更加接近 。
  本题的  n  的范围是 , 解法的效率等于一个常数为 15 以内的 算法:
  代码:  class KthLargest {     int k;     List list = new ArrayList<>(10009);     public KthLargest(int _k, int[] _nums) {         k = _k;         for (int i : _nums) list.add(i);     }          public int add(int val) {         list.add(val);         Collections.sort(list);         return list.get(list.size() - k);     } } 时间复杂度:  空间复杂度:
  PS. Collections.sort 内部最终会调用 Arrays.sort 进行排序。而 Arrays.sort() 本身不只有「双轴快排」一种实现,在排序数量少的情况下会直接使用「冒泡排序」,这里的分析是假定了 Collections.sort 最终使用的是 Arrays.sort 的「双轴快排」。  优先队列解法
  使用优先队列构建一个容量为  k  的小根堆。
  将  nums  中的前 k  项放入优先队列(此时堆顶元素为前 k  项的最大值)。
  随后逐项加入优先队列:  堆内元素个数达到  k  个: 加入项小于等于堆顶元素:加入项排在第  k  大元素的后面。直接忽略 加入项大于堆顶元素:将堆顶元素弹出,加入项加入优先队列,调整堆  堆内元素个数不足  k  个,将加入项加入优先队列
  将堆顶元素进行返回(数据保证返回答案时,堆内必然有  k  个元素)。
  代码:  class KthLargest {     int k;     PriorityQueue queue;     public KthLargest(int _k, int[] _nums) {         k = _k;         queue = new PriorityQueue<>(k, (a,b)->Integer.compare(a,b));         int n = _nums.length;         for (int i = 0; i < k && i < n; i++) queue.add(_nums[i]);         for (int i = k; i < n; i++) add(_nums[i]);     }     public int add(int val) {         int t = !queue.isEmpty() ? queue.peek() : Integer.MIN_VALUE;         if (val > t || queue.size() < k) {             if (!queue.isEmpty() && queue.size() >= k) {                 queue.poll();             }             queue.add(val);         }         return queue.peek();     } } 时间复杂度:最坏情况下, n  个元素入堆,都触发堆调整。复杂度为 空间复杂度:  最后
  这是我们「刷穿 LeetCode」系列文章的第  No.703  篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先将所有不带锁的题目刷完。
  在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

LCK观众不屑帅哥选手压根没zoom那味,他才是真正的少爷脸前导LCK和LPL同时举办了活动,不过两边内容不一样。LPL主要想办选手大会和运动会,队员都是穿着运动服来的。LCK那边想办颁奖仪式,各种选手教练都西装革履的,看起来十分正式。连许不为人知的神秘黑爪特工毛加守望先锋延期2年公布何时见守望先锋已经发售了5年,在这期间制作组为玩家更新了无数的内容,也公布了许多的废案,在各种流言和猜测之中,不知是否有人还记得那个出现在漫画和小说里的那个黑人壮汉,巴蒂斯特的好朋友毛加王者荣耀达摩又获勇者皮肤甄姬西游记联动曝光!韩信星元部件返场大家好,我是七七。新的一年即将到来,S25赛季将在1月2日结束,还想上分的朋友要抓紧时间啦!新赛季的预热在上个周末正式开始,先是曝光了赛季皮肤,后又上线了西游记联动2款皮肤的预热动2款限定新皮肤曝光!情人节限定确认,可免费获取正如老王之前所提到的那样,由于需要根据上一年度的KPI来制定新一年的目标,天美一般都会控制12月的皮肤上新量,只爆料不上线,统统留到明年的1月后再陆续上线。除了已知在1月1日上线的幻塔萌新开荒指南新手入门攻略幻塔在12月16日已经正式开始公测了,不少萌新玩家都会遇到开局不知从何入手的问题,其实开局的过程中最重要的是注意主线任务的推进善于利用地图以及注重体力活力的分配,当然,不只是这些,临近月末!新版本天梯冲分指南炉石传说最新版本奥特兰克的决裂上线以来的第一个月迎来了末尾,135张新卡的加入使得12月初的天梯上各种卡组百花齐放。而随着一个月过去,标准天梯的硝烟渐渐散去,究竟哪些卡组能在这场百把几百万人游戏玩家放在一起玩枪战游戏,技术上可以实现吗?这个问题应该不是指几百万玩家同时玩一款游戏,而是几百万玩家同时在一局游戏吧如果是前者,那么同一款游戏可能开很多个服务器,可以建立很多区,只要服务器堆得多,硬件堆得狠,那么服务器承受第五人格中,哪个求生者最危险?谢邀咯说到最危险的求生者,对于监管者来说,应该就是咒术师了吧?毕竟她的技能太危险了,每次抓到人,一个技能,人就没了。她的技能只要看着监管,就可以无限眩晕,反正我每次玩监管只要有咒术真三国无双霸T0武将强度排行榜真三国无双霸强度节奏榜真三国无双霸T0武将强度排行榜是什么?真三国无双霸游戏已经正式上线了,这款游戏里面有很多经典的真三国无双武将,其中不同的武将强度也是不一样的。这里我们带来了T0武将强度排行榜的介绍灌篮高手手游里,哪个SF最好用?现在灌篮高手手游当中SF(小前锋)的定位比较尴尬。主要功能定位是得分,但论能分的爆发力不如SG,而且得分手法多以突入内线为主,也很容易被有经验的防守者封盖,SF更多还是在内线和外线为什么PS4游戏已经买但不是会员仍然不能联网,没人告他吗?是的呢亲,包括没有办理宽带,没有买路由器,没有连wifi,没有输入正确的密码无法联网,也没人告诉他呢本身游戏机就是硬件,游戏是软件,联网是网络服务,这三个并不是强关联的。网络服务本
质量高还福利多?战舰世界兴许是海战爱好者的最佳选择之一战争是人类历史上不断重演的悲剧,由古至今从未停歇。也许是人类基因深处都隐藏追求刺激的原性,我们对于该类题材的影视小说游戏怀有极高的热情。在游戏方面,我觉得最为华丽的当属海战。指挥自云堇凭啥火遍全球?大佬详解原神2。4文化底蕴,网友拿来写论文人气游戏原神在2。4版本前瞻直播全球曝光后,立刻引起了全网的热议。新版本透露出太多让大家期待的内容两个璃月的新角色申鹤和云堇惊艳登场凝光和刻晴的新皮肤海灯节也将再度来袭,甚至群玉阁2021年影响Minecraft全球局势的十大事件!全面解析mc未来2021年影响全球Minecraft局势的十大事件!全面解析这些事件对于未来mc的影响会是怎样的事件一Minecraft1。18洞穴与山崖第二部分正式发布!可以说这是近十年来我的世吃鸡春节活动提前看!招财猫即将回归,领取服饰币并非易事务实不浮夸!我是你们的情报小能手,微笑十倍镜。随着春节的临近,吃鸡手游和平精英也流出了很多节日的福利,其中不仅有虎虎生威系列的皮肤,而且还有一些新款大转盘的消息!作为一年中最重要的花木兰晋级T0,英雄克星公布,排位积分将补发,梦奇新表情来了前言正式服的更新正在推进中,而全新的冬冠赛挑战杯也即将开启,王者也是趁势上线了新的表情,喜欢收集表情的小伙伴不要错过了,其次正式服特定区服的服务器问题导致的排位赛加星失败,目前已经魔兽争霸3杜隆塔尔战役征服大地中,不转场都能获得这些道具魔兽争霸3的战役地图中,有着大量的装备道具,其中不乏一些属性逆天,却只能在战役模式中拿到的装备。作为游戏额外战役的杜隆塔尔成立中,强力道具非常之多。这次,在回顾战役的时候,舞文将所幻塔核心问题讨论免控状态作者NGA黑豹豹这游戏霸体,无敌,免控,免硬直,是几种不同的抵抗状态,霸体可以免疫多数控制吃伤害,无敌是免疫伤害和控制,免控是免疫控制,免硬直是吃控但不会硬直。关键区别霸体不等于免末日手游新手攻略第十二篇(英雄远征)远征副本1。可以携带3支队伍前往远征关卡,每支队伍都必须上阵不同的战车。2。会自动携带所有汽油进入远征关卡,汽油上限为999个。3。每通过一个关卡后,会自动前往下一关。4。可以扫荡新手玩家最好用冲锋枪?这几把可能更好每个玩家都是从新手阶段玩起来的,而且现在还有源源不断的新人进入到CSGO中来,那么新人该使用什么枪械就是永远热门的话题,看过许多人都在推荐新人用冲锋枪,什么野牛吹风机P90,跑打起第五人格IVL势如破竹!FPX。ZQ三场大胜淘汰ACT第一局比赛上半轮FPX。ZQ求生者对阵ACT监管者FPX。ZQ的求生者祭司前锋心理学家机械师。ACT的监管者yue选择了梦之女巫。(BAN先知佣兵)开局梦之女巫追击机械师,机械师利王者荣耀英雄的前世今生王者独尊嬴政篇自童年时代,玄雍君主嬴政所受的教育在点滴中被来自南荒的怪物白起改变。他们共同成长,最终击退吞噬玄雍的血族军队,重振秩序。血族力量无独有偶地接触到白起,他选择受其折磨以变得强大。嬴政