上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 51 下一页
2014年3月19日
摘要: 2014-03-19 03:40题目:给定一棵二叉树,把每一层的节点串成一个链表,最终返回一个链表数组。解法:前序遍历,遍历的同时向各个链表里添加节点。水平遍历好像还不如前序遍历来得方便。代码: 1 // 4.4 Level order traversal 2 #include 3 #include 4 using namespace std; 5 6 struct TreeNode { 7 int val; 8 TreeNode *left; 9 TreeNode *right; 10 11 TreeNode(int _val... 阅读全文
posted @ 2014-03-19 03:43 zhuli19901106 阅读(257) 评论(0) 推荐(0)
摘要: 2014-03-19 03:34题目:给定一个排好序的数组,设计算法将其转换为一棵二叉搜索树,要求树的高度最小。解法:递归生成平衡二叉树,使左右子树的节点数尽量相等,所以对半开最好了。其实也可以生成一棵完全二叉树,不过写法应该不是很方便。代码: 1 // 4.3 Convert sorted unique array to height-balanced binary search tree. 2 #include 3 using namespace std; 4 5 struct TreeNode { 6 int val; 7 TreeNode *left; 8 ... 阅读全文
posted @ 2014-03-19 03:40 zhuli19901106 阅读(262) 评论(0) 推荐(0)
摘要: 2014-03-19 03:32题目:给定一个有向图,判断其中两点是否联通。解法:DFS搜索解决,如果是无向图的话,就可以用并查集高效解决问题了。代码: 1 // 4.2 Write a program to check if there exists a path between two nodes in a directed graph. 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 struct GraphNode { 10 int... 阅读全文
posted @ 2014-03-19 03:34 zhuli19901106 阅读(292) 评论(0) 推荐(0)
摘要: 2014-03-19 03:30题目:判断一个二叉树是否为平衡二叉树,即左右子树高度相差不超过1。解法:递归算高度并判断即可。代码: 1 // 4.1 Implement an algorithm to check if a bianry tree is height-balanced. 2 #include 3 #include 4 #include 5 using namespace std; 6 7 struct TreeNode { 8 int val; 9 TreeNode *left;10 TreeNode *right;11 12 ... 阅读全文
posted @ 2014-03-19 03:32 zhuli19901106 阅读(323) 评论(0) 推荐(0)
摘要: 2014-03-19 03:20题目:实现一个包含阿猫阿狗的先入先出队列,我要猫就给我一只来的最早的猫,要狗就给我一只来的最早的狗,随便要就给我一只来的最早的宠物。建议用链表实现。解法:单链表可以实现一个简单的队列,这种有不同种类数据的队列,可以用if语句选择,也可以用一个堆做时间上的优化。对于来的时间,我用一个64位整数表示时间戳,在地球被太阳吃掉以前,这个数字是不大可能上溢的,所以问题应该不大。代码: 1 // 3.7 Implement a queue that holds cats and dogs. If you want dog or cat, you get the oldes. 阅读全文
posted @ 2014-03-19 03:28 zhuli19901106 阅读(261) 评论(0) 推荐(0)
摘要: 2014-03-19 03:01题目:给定一个栈,设计一个算法,在只使用栈操作的情况下将其排序。你可以额外用一个栈。排序完成后,最大元素在栈顶。解法:我在草稿纸上试了试{1,4,2,3}之类的小例子,大概两三分钟有了思路。既然比较性排序是基于比较和交换的,那么就在两个栈的栈顶进行比较,同时在栈顶进行交换,此处需要O(1)的空间来进行交换。具体实现请看代码,时间复杂度为O(n^2)。代码: 1 // 3.6 Try to sort the elements in a stack with the aid of at most one more stack. 2 #include 3 #incl. 阅读全文
posted @ 2014-03-19 03:20 zhuli19901106 阅读(321) 评论(0) 推荐(0)
2014年3月18日
摘要: 2014-03-18 05:28题目:你肯定听过汉诺威塔的故事:三个柱子和N个从小到大的盘子。既然每次你只能移动放在顶上的盘子,这不就是栈操作吗?所以,请用三个栈来模拟N级汉诺威塔的玩法。放心,N不会很大的。解法:递归着玩儿吧,还挺容易写的。要是迭代,我估计够呛。代码: 1 // 3.4 Implement Hanoi Tower with three stacks. 2 #include 3 #include 4 using namespace std; 5 6 class Solution { 7 public: 8 void initHanoiTower(i... 阅读全文
posted @ 2014-03-18 05:33 zhuli19901106 阅读(280) 评论(0) 推荐(0)
摘要: 2014-03-18 05:17题目:设计一个栈,这个栈实际上由一列子栈组成。每当一个子栈的大小达到n,就新产生下一个子栈。整个栈群对外看起来就像普通栈一样,支持取顶top()、压入push()、弹出pop()操作。另外再实现一个弹出特定子栈popAt()的操作。解法:用stack构成的数组,可以实现快速的随机访问。用stack构成的链表实现,可以防止在中间的一些子栈进行pop操作造成的空隙,但顺序访问的效率要低一些。得根据执行这些操作的偏好和频率来定。代码: 1 // 3.3 Implement a stack with multiple sub-stacks. If one substac 阅读全文
posted @ 2014-03-18 05:23 zhuli19901106 阅读(317) 评论(0) 推荐(0)
摘要: 2014-03-18 05:08题目:实现一个栈,除了能进行push和pop之外,还能在O(1)时间内返回栈中最小的元素。解法:用另一个“最小栈”存放最小的元素,每当有不小于当前最小值的元素进栈时,就代表最小值更新了(就算与当前最小值相等,也代表个数变了)。这时,同时要将最小值进栈。这个最小栈的栈顶就是最小的元素。出栈时,遇到数据栈的栈顶元素与最小栈相等时,要同时将最小栈出栈;否则只弹出数据栈即可。代码: 1 // 3.2 Design a modified stack that in addition to Push and Pop can also provide minimum elem 阅读全文
posted @ 2014-03-18 05:16 zhuli19901106 阅读(317) 评论(0) 推荐(0)
摘要: 2014-03-18 03:19题目:用一个数组实现3个栈。解法: 首先我想过让三个栈动态决定长度。要么左右各一个向中间靠拢,要么三个穿插着,后来都觉得实现起来太复杂,而且思路总有各种功能缺陷,会导致额外的时间或空间复杂度。所以,还是三等分成固定大小吧。好写又好用。代码:// 3.1 Use an array to implement three stacks.// three fixed-length stacks#include #include #include using namespace std;template class ThreeStack {public: Thre... 阅读全文
posted @ 2014-03-18 05:00 zhuli19901106 阅读(330) 评论(0) 推荐(0)
上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 51 下一页