面试过程中遇到的算法和智力问题

1.对一个有一百万数据,数值范围在0-200之间的乱序数据进行排序?

答:快排,这个时间复杂度是nlogn。或者冒泡,n²,这是正常人想出来的解决方法,恩恩,一般都会说第一种快排,毕竟真的很常用。

        如果真是这样,我就不在这里细说了。bitmap不知道有多人听过,想想,这种重复性很大的数据,bit存储是不是非常棒,当然这个是思想,你要是直接使用bitmap反而不好搞。没听过也没事,仔细想想为什么有这个0-200的范围呢,没错,你可以建立一个数组,200的空间,每个数组的索引位置放这个数出现的次数。然后你就懂得了吧。

        当然很多人说,我就知道这种算法,那不好意思,我太渣,当时真没想到,还是回来慢慢查查想想,才想到的。

2. 关于网页编码判断?抓文章网页时,经常需要区分内码是GBK还是UTF-8,这时候判断方法?

答: 这个标签。。没错,但是万一有的网页没写呢,不好意思,我真的见过,而且还很多,因为我做过一段时间的爬虫项目。。容我引用余晟老师的一段神迹代码:(源文件是utf-8,这个很重要),if(content.contains("的")) {

    return "UTF-8";

} else {

    return "GBK";

}   这个也是抖抖机灵的,但是真的很好用,尴尬。。。。

3. 这个不符合题意,我只是当时脑残没想到,所以记一下

    二分法查找时间复杂度,是,怎么推算呢?

答:查找到的最后是一个唯一,n/2/2/2/....=1,n=,然后求出x=,很简单吧,我当时脑抽,硬是第一反应没想出来,虽然后面还是说出来了,但是用了大约一分钟。。

4.两根绳子,每次烧完都需要一个小时,求计算15分钟的方法,绳子不均匀

    答:一头烧完是1小时,那么两头烧完就是30分钟了,于是乎,一条绳子计算30分钟(两头同时烧),另一条绳子也跟着烧,然后半小时过去了,没烧完的绳子还需要半小时,然后点燃另一头,ok,完成。

5. 9个球称重,最快的方法算出唯一不同重量的那个?

答:4 +4+1,可能会称1次或3次。。3+3+3,两次妥妥的。

6. 8x8的棋盘减去两角,然后用31张扑克覆盖(一张扑克覆盖两格,可不可以覆盖完全)?

答:不可以,自己可以一步一步的推理,也可以使用颜色标注法,每个格子标注为红黑相间,两角切除的一定是同一个颜色的,但是一个扑克每次覆盖必定是红黑两种颜色,31张扑克覆盖的必定是31 + 31 ,但是我们剩下的是30+32,所以必定不可以。

你可能感兴趣的:(面试过程中遇到的算法和智力问题)