
微软等数据结构与算法面试100题
文章平均质量分 74
夏天下雨
追求自由 喜欢探索
展开
-
微软等数据结构与算法面试100题 第一题
第一题 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的节点,只能调整指针的指向。 参考了July的整理。表示感谢。 分析: 由上面的例子可以看到,在对于树进行遍历的时候使用了中序遍历方法,依次修改树中节点的前指向和后指向。 因为是要求不能创建新的节点,因为在中序遍历修改指向的时候,需要一个指针指向上次遍历的那个节点的地址,以便原创 2012-08-13 15:56:06 · 757 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第十三题
第十三题 题目:输入一个单向链表,输出该链表中倒数第k个结点。 这道题比较简单,就是对于这个链表,定义两个指针head1 head2,然后让head1向前走k-1个位置以后,head2和head1同时向前走,知道head1知道NULL指针,head2的即为倒数第k个指针。 代码: #include using namespace std; typedef struct原创 2012-08-19 15:11:37 · 883 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第十四题
第十四题 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 分析: 这道题目比较简单,见代码。说明:代码是给出的所有的组合。 代码: #include using namespace std; bool findSum(int *原创 2012-08-20 12:57:16 · 663 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第二十题
第二十题 题目: 输入一个表示整数的字符串,把该字符串转换成整数并输出。 分析:这道题主要要考虑全面即可,比如“-213”,“+234”,“-pox”,“123” 分别输出为-213, 234,错误,123 代码: #include using namespace std; int char2int(char *b, int length) { int star原创 2012-09-01 22:13:14 · 1305 阅读 · 1 评论 -
微软等数据结构与算法面试100题 第十八题
第十八题 题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始, 每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数 字)。 当一个数字删除后,从被删除数字的下一个继续删除第m 个数字。 求出在这个圆圈中剩下的最后一个数字。 分析: 这道题有很多解法,http://blog.youkuaiyun.com/v_july_v/article/de原创 2012-09-01 16:14:27 · 607 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第十九题
第十九题 题目: 定义Fibonacci数列如下: / 0 n=0 f(n) = 1 n=1 \ = f(n-1)+f(n-2) n=2 输入n,用最快的方法求该数列的第n项。 分析: 对于解决斐波那契数列问题,目前主要有三类方法: 1,递归方法;复杂度应该是指数的。 2,非递归的方法,应该可以叫做动态规划方法。由于存在大量的重原创 2012-09-01 19:40:15 · 622 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第十五题
第十五题 题目: 输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 用递归和循环两种方法完成树的镜像转换。 分析: 题目要求求解一个二元搜索树的镜像,用两种方法实现,递归和非递归。 首先,对于求解一个二元搜索树镜像其实就是把树中的每个节点的左右子树调换了即可,因此思路就是周游一个树的所有节点,对于每个节点其左原创 2012-08-28 15:40:46 · 768 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第十六题
第十六题 题目: 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 分析: 这道题主要考察的是二叉树的广度优先周游,比较简单。就是使用队列(queue)作为辅助实现。 #include #include using namespace std; struct node { node * nodeLeft; node * node原创 2012-08-29 09:10:42 · 747 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第十七题
第十七题 题目: 在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析:这道题比较简单,其实和哈希表的原理差不多,就是创建一个表,储存每个字符出现的次数,然后遍历这个表直到找到第一次出现的一次的那个字符。 关于哈希表的大小,因为ASCII表的大小是255,因此数组的长度为255。 代码其实很简单,参考了链接:http://www.d原创 2012-08-29 10:02:30 · 873 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第十二题
第十二题 题目:求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句 (A?B:C)。 说明:本文对两种方法进行汇总,参考http://blog.youkuaiyun.com/daxiamit/article/details/7611088 中第12题目中指出美国阿财的解答 和 July原先给出的解答。 因此这里在写原创 2012-08-19 11:40:07 · 1019 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第十一题
第十一题 题目: 求二叉树中节点的最大距离... 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的, 我们姑且定义"距离"为两节点之间边的个数。 写一个程序, 求一棵二叉树中相距最远的两个节点之间的距离。 分析: 对本题而言,有上面两种情况,一个是最大长度的节点里面没有根节点,一个是有根节点。 如何求解树中节点的最大距离?-->转换成求解每个节点的左子树的深原创 2012-08-18 16:03:16 · 911 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第二题
第二题 题目: 要求设计一个栈,栈包含min函数的功能,即能够在O(1)的时间内做min, pop, push运算。 分析: 因为传统的栈只有push和pop功能,push和pop功能都是在O(1)的时间内做操作,题目要求具有min函数的功能,也就是在pop操作和push操作以后可以 在O(1)的时间内给出最小值的功能。因为如果是直接增加min函数,那么每次计算最小值的原创 2012-08-13 16:06:23 · 1115 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第四题
第四题 题目:输入一个整数和一棵二元树。 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。 例如 输入整数22和如下二元树 10 / \ 5 12 / \ 4 7 则打印出两条路径:10, 12和10, 5, 7。 分析:(本人拙见) 这道题目主要考察的原创 2012-08-14 12:20:26 · 542 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第三题
第三题 题目: 输入一个整型数组,数组里面有正数也有负数,数组中连续的一个或者多个数组成一个子数组,每个子数组都有一个和。 求,所有子数组的和的最大值。要求时间复杂度为O(n) 分析: 本题是一个典型的使用动态规划算法的题目。 动态规划算法的使用基本要素是1、最优子结构(当问题的最优解包含了其子问题的最优解,成该问题具有最优子结构性质) 2、重叠子问题(也就是说如原创 2012-08-14 10:24:25 · 606 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第六题
第六题 题目: 给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数。 上排的十个数如下: 【0,1,2,3,4,5,6,7,8,9】 分析:这道题拿到题目第一感觉是使用迭代算法计算,终止条件是求解得到上面的解。 如果使用迭代算法,会造成一下两个问题:1,迭代算法不能够保证收敛,因此可能陷入死循环,或者说是收敛不到原创 2012-08-15 18:25:48 · 521 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第五题
第五题 查找最小的k个元素 题目:输入n个整数,输出其中最小的k个。 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。 分析: 本题目要求计算n个整数的最小的K个,题目没有直接给出复杂度的要求,因此有很多种解法。 比如排序后一次输出等 很多种解法。如果是要求复杂度为klogn的话比较容易想到可以使用分治(递归)算法。 在这里我原创 2012-08-15 14:50:27 · 610 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第七题
第七题 微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。 为了简化问题,我们假设俩个链表均不带环。 问题扩展: 1.如果链表可能有环列? 2.如果需要求出俩个链表相交的第一个节点列? 分析: 转自:http://blog.sina.com.cn/s/blog_5e3ab00c0100le4s.html 实原创 2012-08-16 14:46:47 · 526 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第九题
第九题 判断整数序列是不是二元查找树的后序遍历结果 题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。 如果是返回true,否则返回false。 例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11 因此返回原创 2012-08-17 12:22:04 · 765 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第十题
第十题 翻转句子中单词的顺序。 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。 分析: 可以根据空格符将单词分开,然后针对每个单词进行操作,string类型的有很多库函数,比如可以实现分割str原创 2012-08-17 16:20:05 · 562 阅读 · 0 评论 -
微软等数据结构与算法面试100题 第二十一题
第二十一题 题目: 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来. 分析: 本题目主要考察的是动态规划知识点。和最长公共子序列题目比较相似, 递归方程为 / sumk(m-n,n-1) sumk(m,n)=原创 2012-09-08 00:22:31 · 1417 阅读 · 3 评论