笔试题 (二)

1. 两个有序链表合并, 时间复杂度是多少? 什么情况下不 work ?

当链表有环或链表有公共节点时不 work

 

2. N 个数, 任意选出两个数求其和, 结果的集合为 S, S 中所有元素之和是多少 ?

朴素解法: 枚举, o(n^2) 的复杂度

 

3. A,B 两个有序数组, 从 A, B 各选出一个元素, 使其和为 target, 给出时间复杂度.

朴素求法: 枚举 A 中的元素, 到 B 中找 target - A[i], 时间复杂度为 o(n*logn)

编程之美单个有序链表求和为 target 的两个元素的位置的变形题. 

设置两个游标 i, j 分别在 A[0], B[n-1] 处. A[i] + B[j] < target -> i ++. else j --;

如果没有找到, 再设 i,j 分别在 A[m-1], B[0] 处, 再遍历一遍.

时间复杂度为 o(m+n)

 

4.  在一个 o(n*n) 的方块中, 有一条环形路径, 该路径上的点标号为 1, 其他坐标上的点标号为 0, 求出环形路径围起来的面积.

Leetcode 原题, 使用 BFS, DFS 都可以. 

 

5. 进程之间的数据共享

a. 共享内存

b. 管道

c. 消息队列

d. 信号量

e. 本地域 socket

 

6. 百度地图中存在需要标注的很多点,并且这些点都需要带描述,现将描述假设为矩形,并且可以位于点的左边或右边,但点不能移动,如果两个点间的描述发生覆盖,则需要将其中的一个点进行删除

1.在一个区域内,请设计算法将有效的点进行输出(尽可能多的点)?

2.如果区域足够大,点足够多,算法会出现性能的瓶颈,请设计详细的算法来说明并解决问题?

1. 默认描述在点的左边, 若左边不可放置则放到右边, 若右边也不可放置, 把该点删除

2. 可以对点附上权值, 优先摆放权值较高的点

 

7. 字符串 "alibaba" 共有几种排列方式

7!/(3!*2!) = 840

 

8. 

#include <iostream>
#include <stdio.h>
using namespace std;

class Base {
public:
	int Bar(char x) {
		return (int)x;
	}

	virtual int Bar(int x) {
		return (2*x);
	}
};

class Derived : public Base {
public:
	int Bar(char x) {
		return (int)(-x);
	}

	int Bar(int x) {
		return (x/2);
	}
};


int main() {
	Derived Obj;
	Base *pObj = &Obj;

	printf("%d\n", pObj->Bar((char)(100)));
	printf("%d\n", pObj->Bar(100));
}

输入 100, 50. As expected.

 

9. 下列那个不是线性表? (c)

A. 队列 B. 栈 C. 关联数组 D. 链表
线性表包括数组和链表, 以及由数组和链表组成的数据结构
 
10. 下列有关在一个处理器(processor)上跑两个线程(thread)的说法中,正确的是

A. 一个线程可以改变另一个线程的程序计数器(program counter)

B. 一个线程既不能读也不能写另一个线程的栈(stack)

C. 一个线程可以读写另一个线程的寄存器(register)

D. 以上都不对

 

11. 关于双链表的搜索给定元素操作的说法正确的是

A. 从两个方向搜索双链表,比从一个方向搜索双链表的速度慢

B. 从两个方向搜索双链表,比从一个方向搜索双链表的方差要小

C. 从两个方向搜索双链表,比从一个方向搜索双链表速度要快

D. 以上说法都不正确

个人倾向于选择 D, 单方向和双方向是等价的

 

12. 对n个数字进行排序,期中两两不同的数字的个数为k,n远远大于k,而n的取值区间长度超过了内存的大小,时间复杂度最小可以是

A. O(nlogk) B. O(nk) C. O(n) D. O(nlogn)
考察的应该是堆排序, 选 A
 
13. 一台指针式钟表的时钟和分钟的指向重合的时间间隔是 B 。

A. 720/13分钟 B. 720/11分钟 C. 60分钟 D. 以上都不正确

 
一个小时多一点, 就会重合一次, 多出来那一点时间是时针走的角度.
假设, x 分钟后时针分针相遇
那么 分针走了 x/60*360  度, 时针走了 x/60*(360/12) 度 
所以 x/60*360 - 360 = x/60*(360/12), 解出 B
 
一天内, 时针分针会相遇多少次.
(24*60)/(720/11) + 1 次
 
14. 两个大小不同的杯子R和S,R中装着一定量的小米,S中装着一定量的沙子。一名儿童用勺子从S中取出一勺沙子放入R,与小米混合之后,再从R中取出等体积的一勺混合物放入S。假定两勺物品的体积相等,且R和S都没有发生溢出。则以下说法中正确的是 。

A. R中的沙子和S中的小米一样多

B. R中的沙子比S中的小米少

C. R中的沙子比S中的小米多

D. 无法判断

假设 R 中有小米 a 勺, S 中有小米 b 勺, 经过两步倒腾, A 正确.

 

15. 假定抛出的硬币落地之后正反两面出现的概率分别是1/2。那么抛10次和100次硬币(分别称为T10和T100)相比,以下说法正确的是

A. T100出现一半的正面比T10出现一半正面的概率更大

B. T100前3次都是正面的概率比T10前3次都是正面的可能性大

C. T100正面次数的方差小于T10出现正面次数的方差

D. T100出现正面的比例比T10出现正面的比例在(0.45,0.55)区间中的可能性更大。

 

这种题目可以直接把 10, 100 替换成 2, 3 来计算. 不用笔计算也知道 D 是正确的, 毕竟, 大数定理嘛

 

16. 某福彩机构推出了一款简单的猜谜游戏:游戏玩家只需交纳n元,赌红或者黑。如果开奖结果与游戏玩家所赌的颜色相同,则玩家除得到交纳的n元赌资外,还可以获得n元作为奖励;否则该玩家失去交纳的n元赌资。为了游戏公平,开奖是红或者黑的概率均为1/2。某游戏玩家想出了一个玩法:开始出100元参与赌博,然后按照如下规则进行游戏,如果输掉,并且赌资充足,就把已经输了的总钱数翻倍作为赌资进行赌博;否则,就停止该游戏。假定该机构赌资无限,而玩家的赌资比较有限,以下关于该玩家退出游戏时的情形的评论中合理的是:

A. 该玩家的策略可以保证游戏结束时赢钱数的期望为正数

B. 该福彩机构长期会赔钱

C. 该玩家会有一定概率在游戏结束时输钱,但输得不多

D. 该玩家赢的可能性比输的可能性大

 

非常有意思的一道题, 我以前也想过去赌场用这招, 但从来没计算过到底会输还是会赢, 不过以赌场的立场来看, 这种玩法他们肯定考虑过了, 所以玩家输的面应该是比较大.

为了方便计算, 假设玩家的钱足够玩 5 次

那么会发生下面几种情况(0x001 表示第三场才赢):

0x1 概率 0.5 收益 n 投入 n

0x01 概率 (0.5)^2 收益 n 投入 2n

0x001 概率 (0.5)^3 收益 3n 投入 6n

0x0001 概率 (0.5)^4 收益 9n 投入 18n

0x00001 概率 (0.5)^5 收益 27n 投入 54n

0x00000 概率 (0.5)^5 收益 -81n 投入 54n

计算期望

发现期望是 0

因为玩家的钱是有上限的, 所以, 有可能输

玩家要是输钱的话, 那就输惨了, 所以不知道选啥

 

17. 有16瓶水,其中只有一瓶水有毒,小白鼠喝一滴之后一小时会死。请问最少用

只小白鼠,在1小时内一定可以找出至少14瓶无毒的水?

A. 1只

B. 3只

C. 4只

D. 16只

 

15 = 0x1111

假设用 4 个小白鼠, 分别为 a b c d

对小白鼠的喝法编号

a b c d

0 0 0 1

0 0 1 0

...

1 1 1 1 

这样, 小白鼠的死亡组合对应第几瓶有毒.

 

18. 有一台4核CPU的服务器,上面运行着1种在线服务。如果该在线服务处理一个请求在非独占IO上的等待时间和CPU计算上消耗的时间比为2:1,假定IO带宽充足,那么至少开

个线程能最大化性能地使用该服务器?

不会.

 

19. 有一种语言称为lua,里面的数字只有一种类型(number),实际上是双精度浮点数。没有各种位数的整数,如32位、64位整数等。那么关于该语言的说法错误的是

A. 该语言可以用number 类型的变量作为数组下标

B. 该语言可以表示任意32位数字整数的数字ID

C. 该语言无法实现32位数字整数的按位与、或、异或运算

D. 该语言可以正常进行双精度浮点数运算

不会.

 

20. 一个在线服务通常需要读取存储着海量数据的数据库。为了提高服务的处理速度,通常需要加cache(缓存)。以下场景中不合适使用cache的是

A. 数据库中每条数据被访问到的概率近似相等,且独立

B. 使用了多线程机制的服务

C. 单条数据尺寸大小的数据

D. 有着大量访问的服务

使用 cache 的潜在条件是数据的局部性, 假如每条数据被访问到的概率相等, cache 的意义不大.

 

21. 有1023个两两不同的整数,取值范围是1到1024,其按位异或的结果的取值范围是 。

A. 0到1024

B. 0,1025到2047

C. 1到1024

D. 2到2048之前的全部偶数

 

枚举 1~4, 1~5, 觉得 B 对

 

22. 七夕节n恋人(n>=2)围成一圈举行篝火晚会。晚会的规则是:男女相同,且每对恋人处在相邻的位置上。请问有多少种不同的圈子?

A. (2n-1)!/2 B. 2(n-1)! C. 2n(n-1)! D. (2n)!

 

搜索了一下转圈求排列数的问题, 找到一个比较好的解法.

大意是, 先固定一个人不动, 然后对其他人全排列. 这道题, 前固定一对男女, 然后对其他对男女全排列, 每对男女又有两种坐法, 所以答案为 (n-1)!*2^n

两道扩展题

做题的时候关于n个元素围成一圈有两个题目,解法却互相冲突:
例一:
(2005上海,第11题)某小组有四位男性和两位女性,六人围成一圈跳集体舞,不同排列方法有多少种?(    )  

A. 720 B. 60 C. 480 D. 120



解法:将六个人排成一圈,共有种方法。但注意到下图显示的六种情况对应着相同的相对位置,应该将相同情况别除。所以共有种方法。


例二:
用6枚不同的珍珠串一条项链,共有多少种不同的串法?(    )

A. 720 B. 60 C. 480 D. 120



解法:N枚不同的珍珠串一条项链,有串法;种;


我个人认为除以n才是对的,而不是除以2n。
请高手指教!!!

链接: http://bbs.qzzn.com/read.php?tid-14125136.html

 

 

posted @ 2014-03-28 11:57  周卓  阅读(2824)  评论(0编辑  收藏  举报