发布于 2014-09-23 03:55:26 | 220 次阅读 | 评论: 0 | 来源: 网友投递
人人网
人人拥有中国领先的实名制社交网络平台,在用户数、页面浏览量、访问次数和用户花费时长等方面均占据优势地位。用户可以在这一平台上相互交流,分享信息和用户自创内容,玩在线游戏,听音乐,参与团购,并享受一系列其它服务
网友投过来的二份人人网的面试题,感兴趣的同学参考下。
一面
1 实现atoi
2 单链表变形 如 1 2 3 4 5 变为 1 3 5 4 2 如1 2 3 4 变为 1 3 4 2(就是拆分链表 把偶数为反过来接在奇数位后面)
二面
1 二叉树查找不严格小于一个值的最大值(返回节点)。
2 有序数组里二分查找一个数(如果有相同的找最后一次出现的)。
3 等价于n*n的矩阵,填写0,1,要求每行每列的都有偶数个1 (没有1也是偶数个),问有多少种方法。
评论:开始以为是算法题,想了狂搜,递推(dp,可以用xor表示一行的列状态,累加),分治,(拆两半,然后上半段下半段的列有相同的奇偶性)。后来,自己算了几个发现n = 1 n = 2 n = 3 的结果,他告诉了我n = 4是多少,然后发现f(n) = 2^((n - 1) ^2) 。最后我给出了一个巧妙的证明。然后发现如果是m*n的矩阵也是类似的答案,不局限于方阵。
==============================================
第一面:
1、(1)++i 和 i++,那个效率高?
(2)++++i,i++++,哪个是合法的?
(3)实现int型的++i 和 i++操作。
2、一段程序,求输出。(考察静态变量和模版类)
int g = 0;
template<typename T>
class B
{
public:
int static fun()
{
static int value = ++g;
return value;
}
};
int main()
{
cout << B<int>::fun() << endl;
cout << B<char>::fun() << endl;
cout << B<float>::fun() << endl;
cout << B<int>::fun() << endl;
cout << B<long>::fun() << endl;
return 0;
}
3、(1)实现二进制转十进制。
(2)如果有下面这种能直接求二进制转十进制的代码,是怎么实现的?
binary<1>::value; // 结果为1
binary<11>::value; // 结果为3
4、volatile、explicit、mutable表示的含义。
5、求整形数组的一个子数组,使得该子数组所有元素的和的绝对值最大。
6、(1)写求单链表是否有环的算法。
(2)如果有环,如何找出环的第一个结点。
7、实现单例模式。
二面:
1、一个文本,一万行,每行一个词,统计出现频率最高的前10个词(词的平均长度为Len)。并分析时间复杂度。
2、求数组中最长递增子序列。