1. 逻辑题
有一个小白程序员,写了一个只能对5个数字进行排序的函数。现在有25个不重复的数字,请问小白同学最少调几次该函数,可以找出其中最大的三个数?
此题非常有意思,对25个数随机分成5组,进行五次函数调用,得到ABCDE五个内部排好序的数列。
最大的数a
可以通过对A[1],B[1],C[1],D[1],E[1]
调用函数获得。第二大的数b
基于下面的逻辑推理:假设a,b
位于同一组,则b
为A[2]
,否则b
为B[1]
。第三大的数c
基于下面的逻辑推理:假设b,c
位于同一组,则c
可能为A[3],B[2]
否则为A[2],B[1],C[1]
。
所以只需要再对A[2],B[1],C[1],A[3],B[2]
调用该函数,就可以得到b,c
。
2. 图论相关
设 ,其中 di为非负整数,i=1,2,…n 。若存在n个顶点的(简单)无向图,使得顶点vi的度为 di,则称 d是可图解的。下面给出的各序列中哪个是可图解的?
A:(0,1,1,2,,3,3);
该问题是Havel-Hakimi定理的考察,定理内容:由非负整数组成的有限非递增序列,S={d1,d2,d3…dn},当且仅当
也是可图的。不能出现负数
实际动手,拿上题例子来说:
/*
重新非递增排序原序列:3 3 2 1 1 0
1. 删除3,后面3个数依次减1 2 1 0 1 0
2. 重新排序 2 1 1 0 0
3. 删除2,后面2个数依次减1 0 0 0 0
证明原序列可图解
*/
3. 线性表的平均查找长度
设顺序线性表的长度为30,分成5块,每块6个元素,如果采用分块查找并且索引表和块内均采用顺序查找,则其平均查找长度为( )。
只要是涉及顺序查找,都应该直接按照(1+n)/2来得到平均查找长度,这个公式并不是近似,而是由 得到。
4. 逻辑问题
下面两段代码中for循环分别执行了多少次?
1.
unsigned short i,j;
for(i=0, j=2; i!=j; i+=5, j+=7)
{}
2.
unsigned short i,j;
for(i=3,j=7;i!=j;i+=3,j+=7)
{}
追赶问题,i和j相差2,速度为i为5,j为7,设第k秒ij相遇,则 ,得k=32767。同理,第二个程序的循环次数为16383。
5. 哈夫曼树
若度为m的哈夫曼树中,其叶结点个数为n,则非叶结点的个数为()
通过回忆huffman树的构造过程,其一定只含有度为m和0的节点。假设非叶节点的个数为x个,由边的个数和节点数的关系得到: , 。
6. HTTP 请求方法总结
摘自菜鸟教程:
方法 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体。 |
HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | 请求服务器删除指定的页面。 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
具体信息,可以参考该博文HTTP请求方法详解。