2012年7月1日

摘要: 题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。 题目:一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。复杂度最好是O(n),如果是O(n2)则不得分。 题目:Given a set S of n integers, are there elements a, b, c i 阅读全文
posted @ 2012-07-01 14:22 做个不善的人 阅读(336) 评论(0) 推荐(0)
 
摘要: 原题: 怎样从顶部开始逐层打印二叉树结点数据? 分析:逐层打印是个很明显的广度优先算法,BFS的首选自然是用队列保存没有被遍历过的节点,每一层查一个marker以区分不同的层,算法复杂度是每个节点被遍历一次,所以为O(n),空间复杂度为某一层的最大节点数。为O(lg(n))。 原题: 怎样把二叉树按zig-zag的顺序转换为一个链表? 分析:这个是类似的,不过就用栈了,计算复杂度为O(n),空间复杂度为O(log(n))。voidprintTreeByLevel(BinaryTreeNode*root){stack<BinaryTreeNode*>nodes_0;stack< 阅读全文
posted @ 2012-07-01 13:23 做个不善的人 阅读(1588) 评论(0) 推荐(0)