原文:面试题 30,最小的k个数,堆解法和快速选择解法。 (附最大堆的插入/删除操作实现)

这道题最简单的思路是排序,时间复杂度是O nlog n 。但是这样做在那n k 个数的排序上浪费了资源。 改进一下,将数组的前k个数作为最小的k数的缓存。从第k 个数开始遍历,如果有比前k个数小的,就将其和前k个数那个较大交换。 照这个思路,可以引入一个结构,使得前k个数总是最大的数在第一个,这样每次遇到一个数值需要和前k个数中排在第一位的那个最大数比较就可以了。 这个结构就是最大堆。 思路一: ...

2014-01-26 12:07 0 2580 推荐指数:

查看详情

亚马逊面试题解法

题目: 数组有N+M个数字, 数字的范围为1 ... N, 打印重复的元素, 要求O(M + N), 不 可以用额外的空间。 代码: private int[] arr = { 8, 5, 7, 6, 4, 2, 6, 8, 9, 3, 1, 6, 4, 2, 1, 7}; ...

Sat Feb 04 18:53:00 CST 2012 0 3662
ThoughtWorks 一道面试题解法

前两天面试ThoughtWorks,有一道家庭作业题,题目如下: 思路如下: 把所有的会议安排在两天内,每天分为上午和下午,上午最多三小时(180min),9点到12点,下午最多四小时(240min),1点到5点。 其实就是给定大小的4个坑,每个会议都是一个固定大小 ...

Wed Mar 22 19:08:00 CST 2017 6 8087
快速选择算法(找到第k个数字)

  在一个给定的乱序的序列中找到第k个数字,可能会想到先排序,然后输出第k个数。这种方法简单粗暴,时间复杂度为O(nlogn)。   还有一种方法是快速选择,它的思想和快速排序很相似。就是先选择个数x,然后把这个序列分成左右两边,其中左边的所有的数都<=x,右边的数都>=x ...

Wed Jul 21 05:52:00 CST 2021 0 214
部门优化和邀请码检测面试题——Java解法

部门优化 某公司内有 4 个项⽬组,项⽬组 A、B、C、D,项⽬组A现有10人,项⽬组B现有7人,项⽬组C现 有5人,项⽬组D现有4人。为了实现跨项⽬组协作,公司决定每⽉从⼈数最多的项⽬组中抽调 3 ⼈ 出来,到其他剩下 3 组中,每组 1 人,这称之为一次调整优化(亦即经过第⼀次调整后,A组 ...

Sat Oct 10 01:31:00 CST 2020 0 850
面试题目“ABCDE × 4 = EDCBA”新解法

ABCDE*4=EDCBA   在面试宝典上面看到的一道题目,也是一道老掉牙的题目了,题目详情:一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来.   网上流传的代码都是对5位数ABCDE的所有可能情况作遍历,即从10000 - 99999;我的想法是把对EDCBA作遍历 ...

Thu Sep 12 20:24:00 CST 2013 8 1302
经典面试题楼层丢鸡蛋问题的动态规划解法与数学解法

原题: 有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度。比如鸡蛋在第9层没有摔碎,在第10层摔碎了,那么鸡蛋不会摔碎的临界点就是9层。 问:如何用最少的尝试次数,测试出鸡蛋不会摔碎的临界点? 注意:只有两个鸡蛋。第一个鸡蛋碎了,第二个鸡蛋只能挨个楼层测试了。 动态规划解法 ...

Sun Jul 08 00:22:00 CST 2018 0 1737
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM