微软面试百题题解
GMFTBY
for all
展开
-
微软面试百题005——SBT再解第K数问题
1.题目描述: 求一组数组中的第K大或者第k小的数 2.算法: 上一期我们通过了二叉堆来进行该问题的求解,非常的高效,我们通过O(n)就可以解决问题 这一期我们通过SBT来解决:SBT详解 我们通过SBT的select来解决问题会变得非常高效,如果不考虑剑术的时间,时间复杂度是O(logn),如果考虑建树是O(logn+n*logn) 附上select函数代码: int SB原创 2016-08-18 15:18:45 · 667 阅读 · 0 评论 -
微软面试百题016——BST层序遍历
1.问题描述: 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 7 8 / \ 6 10 / \ / \ 5 7 9 11 输出8 6 10 5 7 9 11 2.算法解决: 对于层序遍历,其实说白了就是BST的广度优先遍历,我们采用的策略是建立一个队列,不断向叶子结点进行扩展,当队列为空的时候,我们显示的结果是BST已经被广度优原创 2016-08-26 16:28:11 · 678 阅读 · 0 评论 -
微软面试百题010——二叉树节点最大距离
1.问题描述: 求二叉树结点中的最大距离(假设二叉树中节点都可以是双向的) 2.思路: 先援引一段很牛逼的英文: ANSWER: This is interesting... Also recursively(递归的), the longest distance between two nodes must be either from root to one leaf, or betw原创 2016-08-14 14:10:02 · 944 阅读 · 0 评论 -
微软面试百题009——按词反转句子
1.问题描述: 翻转句子中单词的顺序。 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。 2.解法: 栈 我们先将句子的内容保存下来,然后开辟一个栈,以单词为单位不断的pop出,这是最好考虑也是最噶小的做法原创 2016-08-13 23:14:32 · 917 阅读 · 1 评论 -
微软面试百题008——后序遍历找BST
1.题目描述: 通过我们给出的一个后序遍历结果,找出一颗二叉树满足要求,找到了,返回true,没找到返回false 2.解法: 又是一道BST 性质和后序遍历结合的题: 首先BST我们就不过多赘语了:BST总结 我们这道题主要考的使我们的后序遍历的性质: 我们对一个给出的后序遍历可以这么来理解: 我们把后序遍历先拆开两块: 后序遍历的划分特点 A |B |C原创 2016-08-13 21:25:32 · 996 阅读 · 0 评论 -
微软面试百题012——5050的各种限制解法
1.问题描述: 题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。 2.解法: 2.1位运算: 首先我们需要了解一下,在该操作中我们需要用奥的位运算有哪些首先,我们根据公式对式子进行化简 原式=(n*n+n)/2 首先对于最后的除以2操作我们直接调用右移操作就可以实现: 在这里我解原创 2016-08-25 10:34:05 · 550 阅读 · 0 评论 -
微软面试百题015——镜像翻转BST
1.题目描述 题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。 例如输入: 8 / \ 6 10 /\ /\ 5 7 9 11 输出: 8 / \ 10 6 /\ /\ 11 9 7 5 2.算法思路: 标准的递归思路,我们采用前序遍历的顺序,不断的对树进行翻转,知道遇原创 2016-08-23 21:55:45 · 807 阅读 · 0 评论 -
微软面试百题007——链表相交
1.题目描述: 给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。 问题扩展: 1.如何判断链表存在环 2.如果需要求出俩个链表相交的第一个节点列? 2.求解: 1.如何判断链表带环 我们加入两个指针,一个快指针,一个慢指针,快指针一次前进2个单位,慢指针一次前进一个单位 如果不存在环的话快指针会先扫描到NULL 如果存原创 2016-08-11 09:56:50 · 940 阅读 · 0 评论 -
微软面试百题001——BST转化有序双向链表
微软面试百题001题解,超详细的解释内容,算法实现,以及本博主倾力打造的BST总结连接,绝对让想学之人有所学,言简意赅,赚的就是回头客原创 2016-08-06 14:40:14 · 3060 阅读 · 0 评论 -
微软面试百题002——返回优先级的栈
微软面试002重磅题解 优先栈原创 2016-08-07 11:54:37 · 919 阅读 · 0 评论 -
微软面试百题004——指定BST路径和
微软面试百题004 1.题目大意: 给出一颗二叉查找树BST 定义路径:从根节点出发到叶子节点终止视为一条路径 定义路径和:路径上的所有上的节点的权值之和 给定一个权值,请求出满足权值路径和的所有的路径 2.解题思路: 因为我们是要求解出所有的情况,所以很自然而然的我们就会想到深度优先遍历(DFS) 我们从根节点开始,每次向下遍历至所有的根节点,满足条件打印一次(存储在余下原创 2016-08-09 16:21:01 · 573 阅读 · 0 评论 -
微软面试百题005——堆实现求前k大/小的数
1.题目描述: 请求出一组序列中的数中的前k小的数,或者前k大的数,问题很简单 2.算法思路: 该题利用顺序存储二叉堆可以很好的解决: 首先我们先解释一下“堆”这个数据结构 堆这个东西我们可以理解成是利用了二叉树的一条性质而人工构建的一组顺序存储二叉树 分类: 最小堆:每个父亲节点都比子节点小 最大堆:每个父亲节点都比子节点大 顺序存储实现的原理: 二叉树存在一条性质,原创 2016-08-09 18:28:23 · 787 阅读 · 0 评论 -
微软面试百题017——哈希查找/优先队列
1.题目描述: 在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 2.算法讲解: 本题中,我们需要一种数据结构可以让我们通过读取字符从而查找到对应的出现次数,并且我们要尽可能的提高查找的速度 所以我们就会考虑到一种数据结构——哈希表,详情请点击点击打开链接 我们都知道,通过哈希表,我们可以将存取的速度提高到O(1)的复杂度 并且,题目中,我们是将字符映原创 2016-08-26 17:13:58 · 716 阅读 · 0 评论 -
微软面试百题003(归并排序/动态规划)
微软面试百题003 求子数组最大和原创 2016-08-08 13:17:34 · 1330 阅读 · 0 评论 -
微软面试百题011——找数
1.问题描述: 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11。 2.解法: 1.首先我们按照升序排序 2.添加头尾指针,sum和代表头尾指针对应的元素的和,如原创 2016-08-15 13:13:44 · 1141 阅读 · 0 评论