- 5
- 0
- 约1.62万字
- 约 23页
- 2017-12-24 发布于河南
- 举报
手机分配短讯id的面试题目
问题分析
原来的问题是要从一个无序ids数组里分配一个id。我们可以用数学方式去更清楚地说明这个问题。
设m = 256 为所有id的个数,集合为所有id的集合。那么,给定一个已分配id的集合,(即参数ids),本题目可表示为,求一个(即传回的id),符合条件:
减号是补集的意思,即x属于U但不属于A。上回的对答已确定?,即必然存在。此外,这个条件又可以写成:
以上两种表达式可说明此问题的两种解法,一种编程方向是查找U集里有没有不属于A的id,而另种是计算A的补集再取出其中一个id。
实现程序之前,如果可以,应先写测试函数。笔者认为,若面试者在情况容许下,也可在解答题目之前,写下测试程序。如果有多个面试者能同样解题,或许同时写下测试程序的面试者能脱颖而出。
为了简单起见,笔者使用了assert()来检测正确性,只于Debug版本有效。而Release版本则用来测试效能。
由于U集合的子集合很多,?,不可能穷举所有可能集合。所以,只能够举出随机的集合以作测试。
以下是一些常数(宏)及类型声明,TEST_COUNT是测试次数,而TEST_REPEATCOUNT是为了测试效能时,重覆测试的次数(即Release版本会调用测试函数一百万次):
1
2
3
4
5
6
7
8
9
10
11
12
13 #define M 256 // ID的数目,且所有ID在[0, M)的区间内
?
#d
原创力文档

文档评论(0)