分享几道不错的算法笔试题

1、已知数据表A中每个元素距其最终位置不远,为节省时间排序,应采用什么方法排序?
A:堆排序
B:插入排序
C:快速排序
D:直接选择排序

答案是B
解析:
插入排序:如果平均每个元素离最终位置相距c个元素,则其复杂度为O(cn),一共n趟,每次比较c次;
快速排序:最好的、平均的复杂度都是O(nlog(n)),如果每次选择的中间数都最小或最大,那就是最坏的情况,复杂度是O(n^2);所以快速排序和元素的位置没有关系,跟选择的中间数有关。
堆排序:复杂度一直是O(nlog(n));
直接选择排序:跟元素位置没有关系,都要遍历n遍,每遍找出最小或最大数来,复杂度是O(n^n);

2、有2n个人排队进电影院,票价是50美分。在这2n个人当中,其中n个人只有50美分,另外n个人有1美元(纸票子)。愚蠢的电影院开始卖票时1分钱也没有。
问: 有多少种排队方法 使得 每当一个拥有1美元买票时,电影院都有50美分找钱
注: 1美元=100美分,拥有1美元的人,拥有的是纸币,没法破成2个50美分.

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

答案是B,有关解释:
http://blog.csdn.net/jiejinquanil/article/details/52153045

3、连续整数之和为1000的共有几组?(m,n都为整数,单独1个数也算作“连续整数”)
答案是4组
解析:
从m加到n和是1000,求和公式为:(m+n)(n-m+1)/2=1000;可以得到(m+n)(n-m+1)=2000,2000/2=1000,1000/2=500,500/2=250,250/2=125(此时不能被2分解了);125不能被奇数3分解但是可以被5分解,125/5=25,25/5=5,5/5=1,分解完毕。于是2000=24*53;为一个奇数和一个偶数之积,那么m+n和n-m+1哪个是偶数哪个是偶数呢,可见(m+n)>(n-m+1),所以可以认为m+n=5^3, n-m+1=2^4, 此时如果
m+n=5^0=1,则n-m+1=2000,可得n=1000,m=-999,则-999+-998+。。。+1000=1000,符合
m+n=5^1=5,则n-m+1=400,可解
m+n=25,n-m+1=800,可解
m+n=125,n-m+1=8,可解。
总计四个!

4、若以{4,5,6,7,8}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是()
答案是69

分享几道不错的算法笔试题_第1张图片

5、

你可能感兴趣的:(分享几道不错的算法笔试题)