面试过程中,经常会遇到面试官问你,给你40亿个数,找出其中最大的100个数。

解决Top K问题有两种思路:

1.最直观:小顶堆(大顶堆 -> 最小100个数)

维护一个100个数的小根堆,从101个数开始,每次与堆顶元素相比,
如果比堆顶元素大,就将堆顶元素替换掉,然后重新调整堆,这样
可以每次比较将堆中最小的元素淘汰掉,遍历完40亿个数后,堆中
存在的100个数即为40亿中最大的100个数。主要借助于堆,代码略了。

2.较高效:Quick Select算法。

Quick Select算法类似于快排,通过枢轴,将数组分为两部分,左边
元素都大于等于枢轴,右边元素都小于等于枢轴,如果左边元素个数
刚好等于k个,那左边这些元素就是TopK元素,如果左边元素个数大
于k个,则将范围缩小,继续寻找TopK;如果左边元素个数小于k个,
设为m,则在右边元素中寻找Top(k-m)即可。

Quick Select的Java实现如下:

public int findKthLargest(int[] nums, int k) {return quickSelect(nums, k, 0, nums.length - 1);
}// quick select to find the kth-largest element
public int quickSelect(int[] arr, int k, int left, int right) {if (left == right) return arr[right];int index = partition(arr, left, right);if (index - left + 1 > k)return quickSelect(arr, k, left, index - 1);else if (index - left + 1 == k)return arr[index];elsereturn quickSelect(arr, k - index + left - 1, index + 1, right);
}

上面给出的代码都是求解第k大元素;若想要得到Top K元素,仅需要将代码做稍微的修改:比如,扫描完成后的小顶堆对应于Top K,Quick Select算法用中间变量保存Top K元素。

HR常问到的TopK问题解决办法相关推荐

  1. 程序员求职面试 HR常问的问题与参考答案总结

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 文章目录 前言 参考回答 一.为什么会离职? 二.为什么会选择xx公司? 三.为什么选择这个职位? 四. 在原来的单位主要做什么工 ...

  2. HR常问面试题总结(1)

    1. 为什么要离职呢? 问题分析: 这显然是个几乎必问的问题, 因为没有任何面试官喜欢频繁跳槽的人.而且, 如果你不喜欢的上一份工作的特点刚好也是现在所求的这份工作的特点, 那么面试官会毫不犹豫地判定 ...

  3. 面试中人力资源部常问的问题

    面试中HR常问的问题: 1.先简单介绍一下自己,以及工作经历. 2.为什么离开原来的公司? 3.如何看待加班?(外包公司最喜欢问) 4.你认为原来的公司怎么样? 5.如何看待现在的软件行业? 6.对自 ...

  4. Windows XP系统下添加任务计划常出现问题解决办法

    Windows XP系统下添加任务计划常出现问题解决办法 计划任务就是让电脑在指定的时间内执行指定的动作(计划动作),这些动作可以是一个程序,也可以是一个批处理,但是至少是可以运行的(通俗一些就是双击 ...

  5. 计算机常发故障英语,vipkid英语常见问题解决办法

    大家使用vipkid英语学习时,可能会遇到各种问题,下面分享一下vipkid英语常见问题解决办法,希望可以帮到大家. vipkid英语常见问题解决办法 一.浏览器问题 建议使用的浏览器: 谷歌浏览器 ...

  6. HR面试经验总结 | HR面试常问问题

    文章目录 1. 自我介绍: 2. 兼职问的概率不大: 1.聊一下你的职业规划(兼职问的概率一般不大) 2.你怎么看待加班? 3.你希望接下来的公司是怎么样的? 4.你遇到过比较棘手的问题是什么? 怎么 ...

  7. 测试岗位面试常问知识点(偏HR)

    面试常问 视情况回答 1.一个优秀的测试工程师应该具备什么品质? 2.为什么想做测试相关的工作? 对测试感兴趣,性格适合(细心.耐心等),测试人员是质量的保证者,喜欢挑战.展开分析. 3.测试开发与测 ...

  8. linux高级运维笔试简答题及答案,企业linux初级和高级运维面试常问题目问答总结技巧讲解(2020年录制)...

    课程增值: 课程是我最近面试辅导的所有学员,成功找到工作,企业常问题目,我带领大家学习,面试如何问答. 我曾经经历面试linux运维没有做大量准备,经历大量hr给我说的一句话就是 回家等通知吧,心碎了 ...

  9. 最常问的MySQL面试题集合

    除了基础题部分,本文还收集整理的MySQL面试题还包括如下知识点或题型: MySQL高性能索引 SQL语句 MySQL查询优化 MySQL高扩展高可用 MySQL安全性 问题1:char.varcha ...

最新文章

  1. 代码简介:向圣诞老人和他的精灵学习Google Analytics(分析)
  2. 你需要知道的20个常用的Python技巧
  3. Sublime P4语法高亮设置
  4. 自定义消息编码绑定实现
  5. Chrome神器Vimium快捷键学习记录
  6. ABAP实践学习——包材分配表
  7. elasticsearch 安装过程中可遇到的问题
  8. 今天起,踏踏实实做技术
  9. 几个常用的JS代码.
  10. nssl1230-序列【位运算】
  11. 有一个php的类库网站_可以composer下载的,composer轻量级的HTTP开发库
  12. 余承东:华为P40或是鸿蒙系统首款手机,新机明年3月发布
  13. aps是什么意思_三分钟看懂ERP、MES、APS系统的关联和区别
  14. 爬取豆瓣电影储存到数据库MONGDB中以及反反爬虫
  15. 导出excel、word、csv文件方法汇总
  16. debounce(防抖)和throttle(节流)
  17. php判断平板,一种 PHP 判断设备是否是手机/平板的方法
  18. 二叉查找树(BST)的性质
  19. JVM 自带使用总结
  20. Java代码发送post请求工具类

热门文章

  1. mac安装brew(国内)
  2. symfonos: 1
  3. 电脑速度慢的原因及解决方法
  4. 腾讯十大最受欢迎的开源项目!
  5. [Practical.Vim(2012.9)].Drew.Neil.Tip02 学习摘要
  6. 创业基础(第五章:商业模式及其设计与创新) 来自高校:全国大学生创新创业实践联盟 分类:创新创业 学习规则:按序学习
  7. 斯坦福 CS228 概率图模型中文讲义 四、贝叶斯网络
  8. 大众集团「换舵手」,软件战略从「自研优先」转向开放协作
  9. 骨龄预测代码学习(一)
  10. DP线和HDMI线区别,优缺点,传输显示器图像速率