题目: 数组有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}; ...
这道题最简单的思路是排序,时间复杂度是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}; ...
下面第一个结果,通过数组得到的,第二个是普通递归得到的160+万次,第三个是“新解法”(只针对这个问题),166万次和29次,效率自己想。。。 公司面试出这道题,考得就是递归的运用,数组方法,大家知道就行,面试写的时候还是得用递归 数组方式实现 ...
前两天面试ThoughtWorks,有一道家庭作业题,题目如下: 思路如下: 把所有的会议安排在两天内,每天分为上午和下午,上午最多三小时(180min),9点到12点,下午最多四小时(240min),1点到5点。 其实就是给定大小的4个坑,每个会议都是一个固定大小 ...
在一个给定的乱序的序列中找到第k个数字,可能会想到先排序,然后输出第k个数。这种方法简单粗暴,时间复杂度为O(nlogn)。 还有一种方法是快速选择,它的思想和快速排序很相似。就是先选择一个数x,然后把这个序列分成左右两边,其中左边的所有的数都<=x,右边的数都>=x ...
Google面试题 股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值)。 SOLUTION 1: 1.维持两个heap,一个是最小堆,一个是最大堆。 2.一直使maxHeap的size大于 ...
部门优化 某公司内有 4 个项⽬组,项⽬组 A、B、C、D,项⽬组A现有10人,项⽬组B现有7人,项⽬组C现 有5人,项⽬组D现有4人。为了实现跨项⽬组协作,公司决定每⽉从⼈数最多的项⽬组中抽调 3 ⼈ 出来,到其他剩下 3 组中,每组 1 人,这称之为一次调整优化(亦即经过第⼀次调整后,A组 ...
ABCDE*4=EDCBA 在面试宝典上面看到的一道题目,也是一道老掉牙的题目了,题目详情:一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来. 网上流传的代码都是对5位数ABCDE的所有可能情况作遍历,即从10000 - 99999;我的想法是把对EDCBA作遍历 ...
原题: 有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度。比如鸡蛋在第9层没有摔碎,在第10层摔碎了,那么鸡蛋不会摔碎的临界点就是9层。 问:如何用最少的尝试次数,测试出鸡蛋不会摔碎的临界点? 注意:只有两个鸡蛋。第一个鸡蛋碎了,第二个鸡蛋只能挨个楼层测试了。 动态规划解法 ...