简单的总结一下今天的行程吧
昨晚练题的时候一直卡到了早上5点多,虽有不甘,但还是上床去睡了,毕竟过劳死这东西在这一行也不算啥新鲜事了,9点多的时候迷迷糊糊的听到了电话声,第一次没接,之后再次响起的时候那边就给说了,请于今天下午1点半至科大讯飞XXX路参加软件研发实习岗位的笔试面试,这才想起前两天刚在网上投了份讯飞的实习简历,本来大不算过去了,导师那边早就在催过去了,一直还在学校等研究生现场报名,但是那边貌似说今天只有2个人面试研发实习岗位,考虑到影响不太好,就答应过去了,这一路上转车转的我头晕眼花,到了那里。
等到下午1点半开始笔试,一个小时,看了一下试卷,感觉还算正常,没有什么太刁专的问题,就冲冲的答完了。附上试题:这里不得不吐槽一下,我说讯飞好歹也是**省内挺大的一家科技公司啊,敢不敢专业一点,回来之后才发现这些题网上竟然有原题!
1. 已知二叉树的前序遍历为ABCDEFGHIJ,中序遍历为CBEDAHGIJF,请画出其二叉树结构。
注:基础题
2.求一个整数数组的最大元素,用递归方法实现。
#include <iostream>#include <cmath>using namespace std;int maxnum(int a[], int n){if(n == 1)return a[0];if(n>1){return max(a[0], maxnum(a+1,n-1));}}int main(){int num[10] = {0,1,2,3,4,5,6,7,8,9};cout<<maxnum(num,10)<<endl;return 0;}
注:以上为网上给出答案,笔者的做法如下:算法思路:int a[n];int max(int n){if(n==1) return a[0];return a[n-1]>max(n-1)?a[n-1]:max(n-1);}
3.什么是虚拟存储器?虚拟存储器的特点是什么?
void partition(int A[], int n){int x;int i = 0;int j = n-1;while(i != j){while( a[i]%2 == 1)i++;while (a[j]%2 == 0)j++;if(i < j){x = a[i];a[i] = a[j];a[j] = x;}}}注:笔者此题仅仅是给出了算法思路:不过大同小异:
a1 a2 a3 ...... an-1 an
i j
while(i<j)
{
if(ai为奇,aj为偶) ++i,--j;
if(ai为偶,aj为奇) swap(ai,aj),++i,--j;
if(ai为奇,aj为奇) ++i;
if(ai为偶,aj为偶) --j;
}
之后又等了一会,估计应该是一个技术主管类的负责人开始叫我过去面试了。
首先是噼里啪啦一堆项目经验之类,其次又开始面算法了:
第一题是递归判断五子棋问题,在一个棋盘上,0代表空,1代表黑子,2代表白子,现给定一个坐标(ax,ay),代表当前下的黑子的位置,求递归判断黑子是否已经赢了(不考虑赢的趋势,也即仅仅判断当前状态)
然后就是问如何求1到1000000内所有素数,(相信弄过一点算法都清楚筛选法)
最后问了个如何在一个序列中求第k大的数,笔者当时脑袋一热回答了二叉搜索树+优先级(也OK),面试官听完后就来了句,不就是堆嘛。。。
实习面试经历大致就这样吧,累了,睡了。。