看到v_JULY_v博客(http://blog.youkuaiyun.com/v_july_v/article/details/6855788)里面的面试题
看了忍不住有点冲动,想把思路和大家分享一下,大家一起交流,
记得有句话,击打在石头上的浪花才会出现彩虹,所以我们不同思想的交流也能激起一道靓丽的彩虹!
1.十月百度:一个数组保存了N个结构,每个结构保存了一个坐标,结构间的坐标都不相同,请问如何找到指定坐标的结构(除了遍历整个数组,是否有更好的办法)?
思路:只想到用坐标重新作为新数组的小标,把原先的数组的下标作为新数组的值,之后指定坐标直接用坐标索引(不过要要求指定坐标的 最大值要尽量的小)
也可以先对数组以坐标值进行排序再插值吧。
2.百度最新面试题:现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来。
思路:这个问题,理论上要确定那些数没有出现是要历遍的,问题是没有出现的数最少9千万过以上,所以太不划算的,所以我们要解决的是
怎么保存这个不出现的数,而且可以省略去枚举这些不出现的数。
下面我想到一种很省空间的标识方法,至于效率就不做深究了。
首先,定义 一个结构体 struct tagArea{ long start, long end };
然后对这1千万个随机数进行从小到大排序,之后从1开始 到排序后的数组比较 如果 当前数组比前一个数组大1以上 则保存到结构体
即start赋予前一个数组的数 后面数组的数赋给 end , 那么 没有出现的数就可以表示为(start,end)之间。
类似 的 生成了 n个tagArea结构体,他们记录了 没有出项的数。
另外一种方法是 用 二进制的每一bit表示那个数没有出现。
4.搜狗:有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。 请描 述实现算法,并指出算法复杂度。
思路:只能想到二分法比较。。。。