微软十五道面试题 1、有一个整数数组,请求出两两之差绝对值最小的值, 记住,只要得出最小值即可,不需要求出是哪两个数。 2、写一个函数,检查字符是否是整数,如果是,返回其整数值。 (或者:怎样只用 4 行代码编写出一个从字符串到长整形的函数?) 3、给出一个函数来输出一个字符串的所有排列。 4、请编写实现 malloc()内存分配函数功能一样的代码。 给出一个函数来复制两个字符串 A 和 B。字符串 A 的后几个字节和字符串 B 的前几个字节重叠。 5、怎样编写一个程序,把一个有序整数数组放到二叉树中? 6、怎样从顶部开始逐层打印二叉树结点数据?请编程。 7、怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)? 8、请编写能直接实现 int atoi(const char * pstr)函数功能的代码。 9、编程实现两个正整数的除法 编程实现两个正整数的除法,当然不能用除法操作符。 // return x/y. int div(const int x, const int y) { .... } 10、在排序数组中,找出给定数字的出现次数 比如 [1, 2, 2, 2, 3] 中 2 的出现次数是 3 次。 11、平面上 N 个点,每两个点都确定一条直线, 求出斜率最大的那条直线所通过的两个点(斜率不存在的情况不考虑)。时间效率越高越好。 12、一个整数数列,元素取值可能是 0~ 65535 中的任意一个数,相同数值不会重复出现。0 是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取 5 个数值,判断这 5 个数值是否连续相邻。 注意: - 5 个数值允许是乱序的。比如: 8 7 5 0 6 - 0 可以通配任意数值。比如:8 7 5 0 6 中的 0 可以通配成 9 或者 4 - 0 可以多次出现。 - 复杂度如果是 O(n2)则不得分。 13、设计一个算法,找出二叉树上任意两个结点的最近共同父结点。 复杂度如果是 O(n2)则不得分。 14、一棵排序二叉树,令 f=(最大值+最小值)/2, 设计一个算法,找出距离 f 值最近、大于 f 值的结点。 复杂度如果是 O(n2)则不得分。 15、一个整数数列,元素取值可能是 1~ N(N 是一个较大的正整数)中的任意一个数,相同数值不会重复出现。 设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于 N+1。 复杂度最好是 O(n),如果是 O(n2)则不得分。 谷歌八道面试题 16、正整数序列 Q 中的每个元素都至少能被正整数 a 和 b 中的一个整除,现...