原文:面试题-10亿个数中找出最大的10000个数(top K问题)

一个较好的方法:先拿出 个建立小根堆,对于剩下的元素,如果大于堆顶元素的值,删除堆顶元素,再进行插入操作,否则直接跳过,这样知道所有元素遍历完,堆中的 个就是最大的 个。时间复杂度: m n logm O nlogm 优化的方法:可以把所有 亿个数据分组存放,比如分别放在 个文件中 如果是字符串hash x M 。对每个文件,建立大小为 的小根堆,然后按有序数组的合并合并起来,取出最大的 个即是答 ...

2020-03-05 20:19 0 1808 推荐指数:

查看详情

海量数据处理 - 10亿个数找出最大10000个数top K问题

前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些。 先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的10000最小的),将这个数替换堆顶 ...

Sat Feb 16 04:10:00 CST 2019 2 5644
利用最小堆找出10亿个数最大10000个数

最小堆 最小堆是一种完全二叉树,特点是根节点比两个子节点都小(或者根节点比子节点都大) 过程 先找10000个数构建最小堆 依次遍历10亿个数,如果比最小堆的最小值大,则替换这个最小值,并重新构建最小堆 最后输入10000个值 时间复杂度 构建最小堆的复杂度为 logn ...

Tue May 01 18:53:00 CST 2018 0 2403
(算法)从10000个数找出最大10

  从10000个整数找出最大10个,最好的算法是什么? 算法一:冒泡排序法   千里之行,始于足下。我们先不说最好,甚至不说好。我们只问,如何“从10000个整数找出最大10个”?我最先想到的是用冒泡排序的办法:我们从头到尾走10趟,自然会把最大10个数找到。方法简单,就不再这里写 ...

Thu Mar 21 05:10:00 CST 2013 10 19235
[面试题]在数组找出3个数使得它们和为0

给定一个数组S,试找出3个数a, b, c,使得a+b+c=0。也即从集合找出所有的和为0的3个数。 例如:集合S={-1,0, 1, 2, -1, 4},则满足条件的3个数有2对: (-1, 0, 1)和(-1, 2, -1)。注意(-1,1,0)与(-1,0,1)算同一个解 ...

Fri Jul 07 07:47:00 CST 2017 2 3658
面试题找出数组只出现一次的2个数(异或的巧妙应用)(出现3次)(转)

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 分析:这是一道很新颖的关于位运算的 面试题。 首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出 ...

Fri Nov 01 02:03:00 CST 2019 0 334
面试题找出数组只出现一次的2个数(异或的巧妙应用)(出现3次)

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 分析:这是一道很新颖的关于位运算的面试题。 首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出 ...

Thu Oct 03 07:49:00 CST 2013 0 15946
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM