七月三日
sg输入法:
面试官先拿一套卷子,1h时间答完,题量不大,
1.一道程序题,写输出。n&(n-1)。。。求f(131),实际上是求n在二进制下1的个数。
int f(int n) { int cnt = 0; while(n) { cnt++; n = n&(n-1); } return cnt; }
2.单链表逆置,写代码
3.也是根据程序写输出。f(1234),应该输出4320
int f(int n) { int s = 0; do { s += n%10; n /= 10; s *= 10; } while(n>1); return s; }
4.将一个二叉排序树改成双链表,要求不能有新节点
***这个题很好!!
5.哪种排序方法的比较次数与初始顺序无关,答案是选择排序
6.101.01111在计算机中表示的数,答案5.78
7.一段代码,分析其时间复杂度,f()函数的时间复杂度是O(1).
for(i = 1; i < n; i *= 2) for(j = i/2; j < i; ++j) f();
答案O(n),模拟一下。。
8.哈希表的基本思想,以及两种解决冲突的办法
9.支持向量机相关
10.一道概率题,大概是:病人患癌症的概率是XX,医院在没有患病的情况下,检查出癌症的概率是XX,在患病情况下,检查出癌症的概率是XX;问,在检查出癌症的情况下,确实患癌症的概率?
题目大概这样,就是求条件概率。。
设:检查出癌症的事件为A
患癌症的事件为B
则P(A|B) = P(AB)/P(B) = P(A)*P(B|A) / P(B);
讲了一通卷子,然后又问了:
1.取石子游戏,两个人轮流取石子,只能拿一个或者相邻的两个,谁最后取谁赢。问必胜策略
答案:这个跟圆桌上放圆盘一样。。。
2.类似于这样的数组:7 8 9 1 2 3 4, (将一个升序序列,切断,后面拿到前面)查找某个值。
答案:二分查找切开的地方,然后根据查找的值判断在哪边二分,
3.手机键盘中,2对应a、b、c;7对应p、q、r、s;。。。 输入一组数字,输出所有对应字母的排列。要求使用内存最小。 这个直接上机敲代码。。
答案:dfs
rr网:
面试官1:
1.单链表逆置,这个上午也问过。。。
2.两个有序链表合并成一个有序链表。
两道题都是往纸上写,然后面试官分别拿一组样例测试,面试官很仔细~
3.问C++中,STL容器与通用函数之间的联系。。。
问了问C++看了哪些书。。
面试官2:
问了问简历,自我介绍。问些项目相关。。然后说是校友。。
1.类似于这样的数组:9 -1 2 0 -3 4 -5 -9, 设计算法,将数组中所有负数放在正数左面
答案:两个指针,一个从头找第一个正数,另一个从尾找第一个负数,交换。。。重复此过程。。
2.结构体中有三门课程的成绩,对结构体数组进行排序,要求:按照成绩之和升序,如果相等的话按照a升序排序,如果a相等的话,再按照b排序。。。
答案:自写mycmp。面试官又加了成绩之和小于k的条件,又问有没有其他方法,在类里面定义<运算符。
3.据说是工作中遇到的实际问题:n个好友,每个好友有m条新鲜事,新鲜事按照时间顺序从小到大排序;找出前k小个新鲜事。。找出前k大个新鲜事。。。。找出a,b间的新鲜事。。。。思路都一样
答案:找前k小个--维护一个大小为k的大根堆,如果当前值比堆顶元素小,则插入,否则跳过这个好友,从头判断下个好友的新鲜事。。
之后说了下工作的内容。。。