随笔分类 -  微软一百题

每日刷一题,幸福一辈子
4,5,9题
摘要:4在二元树中找出和为某一值的所有路径(树)题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树 10 / /5 12/ /4 7则打印出两条路径:10, 12和10, 5, 7。二元树节点的数据结构定义为:struct BinaryTreeNode // a node in the binary tree{int m_nValue; // value of nodeBinaryTreeNode *m_pLeft; // left child of nodeBinaryTreeNode 阅读全文

posted @ 2013-05-14 16:06 zjgtan 阅读(216) 评论(0) 推荐(0)

明星群众问题及思考
摘要:题目:有n-1个群众和1个明星,群众两两间可能认识也可能不认识,但是群众都认识明星,明星不认识其他任何人。现在每次询问一个人是否认识另一个人的时间复杂度是O(1),要求找出明星的时间复杂度。分析:这是一道老题,关键点在只有一个明星。首先分析一次询问的效果。is A 认识 B? (yes) A不是明星,B可能是明星 : (no) A可能是明星,B是群众。所以一次询问可以确定一个人。总共有n个人,那么当然是O(n)啦。这类时间复杂度的问题一般都有一个O(1)的操作,看看这个操作有什么信息量,就可以很快确定了。例如,如果一次询问可以知道他认识的人和不认识的人,那么就采用分治的方法了。时间复杂度就是O 阅读全文

posted @ 2013-05-05 16:25 zjgtan 阅读(414) 评论(0) 推荐(0)

NO.2 设计包含min 函数的栈
摘要:题目: 定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。 要求函数min、push 以及pop 的时间复杂度都是O(1)。思路: 此题初看也是毫无思路的,栈这个结构我们很熟悉,min的时间复杂度为O(1)最先联想的是最小优先级队列,肯定是不可以的。思考发现,栈的特性可以找到的两个O(1)操作只有push和pop,MIN值的结构也是栈的FILO。FIFO与FILO真是世界上所有次序关系的高度概括。因此考虑辅助堆栈。代码://首先建立几个链栈,注意指针的指向与栈的生长方向class Stack{public: Stack(): base(NULL), top(NULL... 阅读全文

posted @ 2013-02-16 15:33 zjgtan 阅读(259) 评论(0) 推荐(0)

NO.1 把二元查找树转变成排序的双向链表
摘要:题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。举例:输入: 10 / / 6 14/ / / /4 8 12 16输出:4=6=8=10=12=14=16。思路:初遇此题,基本的思路是有的,肯定是调节节点左右孩子指针的指向来实现转换。然郁于认识所限,尝在举例中的输入树中寻求递归解,不得其法。借鉴他人思路,才知中序遍历二叉查找树即得到顺序输出,恍然大悟。 阅读全文

posted @ 2013-02-16 14:05 zjgtan 阅读(190) 评论(0) 推荐(0)

导航