笔试题 (二)
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. 一个线程可以改变另一个线程的程序计数器(program counter)
B. 一个线程既不能读也不能写另一个线程的栈(stack)
C. 一个线程可以读写另一个线程的寄存器(register)
D. 以上都不对
11. 关于双链表的搜索给定元素操作的说法正确的是
A. 从两个方向搜索双链表,比从一个方向搜索双链表的速度慢
B. 从两个方向搜索双链表,比从一个方向搜索双链表的方差要小
C. 从两个方向搜索双链表,比从一个方向搜索双链表速度要快
D. 以上说法都不正确
个人倾向于选择 D, 单方向和双方向是等价的
12. 对n个数字进行排序,期中两两不同的数字的个数为k,n远远大于k,而n的取值区间长度超过了内存的大小,时间复杂度最小可以是
A. 720/13分钟 B. 720/11分钟 C. 60分钟 D. 以上都不正确
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瓶水,其中只有一瓶水有毒,小白鼠喝一滴之后一小时会死。请问最少用
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