日期:2014-05-20  浏览次数:20911 次

PPLive笔试题(刚出炉的)
1、假设一个客户,他的手机中存放有全中国人民的手机号,他的手机通信录顺序很乱而且里面可能有些重复了,现在客户想让我们设计一个程序,帮他把通讯录整理一下,删除重复手机号,说机上能利用的内存只有10M,但是有无限大的硬盘,请给出设计思路,并评估算法性能。
2、有一组数字,如14,26,5,30,0,-2,108,和一个给定的整数a,是否存在其中一个或几个,它们的和等于a。
请实现方法int findNIntendo(int arr[],int count,int a),存在返回1,否则返回0.
3、实现反转字符串。
4、以下关于红黑树的恶说法错误的是:
A、红黑树上插入操作的最差情况下的时间复杂度为O(log n)
B、红黑树上任意节点的左右子树高度差绝对不大于1
C、红黑树上删除操作最差情况的时间复杂度为O(log n)
D、红黑树上查找操作最差情况下的时间复杂度为O(log n)
5、unsigned short hash(unsigned short key){
return (key>>4)%256
}
请问hash(16),hash(256)的值分别是______、______
6、有98个元素的排序好的数组,用二分法查找,最多需要查找几次?
7、下列哪种排序算法和数据结构是不稳定的?
A、插入排序   B、快速排序   C、基数排序  D、(选项忘了)
------最佳解决方案--------------------
好题mark
------其他解决方案--------------------
findNIntendoHelp(arr,count,left,M,++c))==1){
        M[left]=1;
return 1;
}else{
M[left]=0;
return 0;
}
}
int findNIntendo(int arr[],int count,int a){
    stdext::hash_map<int,int> M;
int c=0;
int left=a;
return findNIntendoHelp(arr,count,left,M,c);
}

第三题:
void inversestr(char* str){
int r=strlen(str)-1;
int l=0;char temp;
while(r>l){
temp=str[r];
str[r--]=str[l];
str[l++]=temp;
}
}

第四题:
B

第五题:
1 16

第六题
7次。

第七题:
快排

第八题:
看不清

第九题:
A

第十题
B
------其他解决方案--------------------
周末人怎么都不见了?出来冒个泡啊~~
------其他解决方案--------------------
第一个:放到一个set里面,自动就删除重复的了。不过我想出题的人想考的应该是解题思路。
我的思路是按手机号分别存放到不同的文件当中,比如132的放到一个文件中,133的放到一个文件中。
遍历文件的时候,第一次遍历只读取132的,10M的空间存储132开头的手机号,重复的删除(Set集合就行了),最后剩余的存到132文件中。
然后第二次遍历只读取133的,依次下去。
第二个:我能想到的思路只有双层for循环了。算法就不写了,挺简单的,就是效率上有可能有点低。
第三个:把字符串放到一个List或者map(key和字符成映射)中,遍历list的时候用反转遍历,map就按Key值从大到小读取呗。
第四个:我不知道叫红黑树
后面的先不做了,有空继续做。



------其他解决方案--------------------
谁能写出具体的实现,太笼统了作为菜鸟的我接受不了呀
------其他解决方案--------------------
这个坐等思路,我是没办法啊
------其他解决方案--------------------
第二题,贪心算法
------其他解决方案--------------------
表示不会~~
------其他解决方案--------------------
第一个,应用文件的归并排序
------其他解决方案--------------------
第二道题不知道这样行不行
import java.util.ArrayList;

public class Find{
public static final int MAX = 100;
public static ArrayList<Integer> array = new ArrayList<Integer>();

public static void main(String[] args) {
int arr[] = { 2, 4, 6, 7, 100 };
int flag = findNIntendo(arr, 3, 110);
System.out.println(flag);
}

public static int findNIntendo(int arr[], int count, int a) {
int i;
int[] a1 = new int[MAX];
int[] b1 = new int[MAX];
for (i = 1; i < 100; i++)