笔试的内容不是很难,下面是一些记录:
选择题:
1.两个长度各为N的有序数组进行合并,求可能的最多的比较次数,(2n-1)
2.两个长度为N的有序数组,要求在这两个数组中排第N的元素,最小的时间复杂度? ( O(logn),类似二分搜索)
3.逆波兰表达式求值,(竟然画了很久的后缀表达式没画出来,真杯具。。直接求值就行了)
4.一个关于二叉树的问题,大意是要在二叉树查找某个元素,求选项给出的查找序列哪个不可能出现?(考察二叉树的性质)
5.excell的列表示如AB...Z, AA AB ....ZZ, AAA AAB .... ZZZ, 求DEF的十进制值(求26进制的值,直接计算)
6.函数指针数组的写法问题。。
7.虚函数问题,大意是基类定义了一个保护成员,构造函数初始化为0,还定义了一个虚函数,基类是将成员--,而子类只重定义了虚函数,将成员++,主函数里,new了一个子类对象,然后定义一个基类指针指向此对象,又定义了一个基类引用指向此基类指针指向的对象,然后分别调用了虚函数,要求基类定义的成员的值。
8.给出一段程序,要求输出值,直接计算。程序里计算字符数组 char a[]={'a','b','c'}的长度采用sizeof(a)/sizeof(a[0])的方法。
9.指出给出选项中不可能存储在栈中的是。。。(全局静态变量,放在静态区中)
10.给出char *p="hello world", char a[]="byebye",strncpy(p,a,6),问这个程序运行后p的结果是什么?(这里*p是一个字符串常量,不能对它的元素进行修改,所以程序在运行时会出错)
主观题编程题:
大意是给出一个数组,这个数组每个元素都不同,并且可能是升序的,或者是升序+旋转后的结果,例如1,2,3,4,5,或者 4,5,1,2,3 或者 3,4,5,1,2等等,
然后给一个数,要找出这个数在所给数组中的索引值或者返回-1,要求复杂度必须小于o(n)。
相对比较简单吧,首先是判断是否是从左到右有升序的,若是,则用二分查找,复杂度为o(logn),如果不是,则根据要找的值与第一个值比较的结果,在左半部分或右半部分查找这个数,易知,查找次数肯定小于n,因而复杂度符合要求。
第二个小题是要给出一些测试数据并加以说明。
正式找工的第一场面试,不是很顺利,特此记录,攒下RP, ^.^