摘要: /************************************************************************//* 查找最小的k 个元素题目:输入n 个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。 思路:利用make_heap选出vector前K个数的最大值,对于后面的元素,与最大值作比较,如果小于最大值,则替换最大值,然后再次make_heap,选出当前k个数中的最大值.此种解法利用STL函数跳过了建堆过程。//make_heap是标准算法库... 阅读全文
posted @ 2011-10-18 10:15 refazy 阅读(1285) 评论(0) 推荐(0) 编辑
摘要: http://lilongfei1030.blog.163.com/blog/static/860152820087201031473/题目: 亲戚(Relations)或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥的表姐的孙子。如果能得到完整的家谱,判断两个人是否亲戚应该是可行的,但如果两个人的最近公共祖先与他们相隔好几代,使得家谱十分庞大,那么检验亲戚关系实非人力所能及.在这种情况下,最好的帮手就是计算机。为了将问题简化,你将得到一些亲戚关系的信息,如同Marry和Tom是亲戚,Tom和B en是亲戚,等等。从这些信息中,你可以推出Marry和Ben是亲戚。请 阅读全文
posted @ 2011-10-17 14:47 refazy 阅读(288) 评论(0) 推荐(0) 编辑
摘要: /************************************************************************//* 4.在二元树中找出和为某一值的所有路径题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。3例如输入整数22 和如下二元树10/ \5 12/ \4 7则打印出两条路径:10, 12 和10, 5, 7。二元树节点的数据结构定义为:struct BinaryTreeNode // a node in the binary tree{int m_nValue; /. 阅读全文
posted @ 2011-10-17 13:49 refazy 阅读(255) 评论(0) 推荐(0) 编辑
摘要: /************************************************************************//* 求子数组的最大和题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。 ... 阅读全文
posted @ 2011-10-17 10:53 refazy 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。要求函数min、push 以及pop 的时间复杂度都是O(1)。思路:在栈结点中增加一个指向当前栈最小值的指针。 #include <iostream>#include <time.h>using namespace std;struct StackNode{ int value; StackNode *pNext; StackNode *pMin;} ;typedef struct{ StackNode *top; //栈顶指针}LinkStack;void InitStack(LinkStack *S 阅读全文
posted @ 2011-10-17 10:27 refazy 阅读(215) 评论(0) 推荐(0) 编辑
摘要: http://baike.baidu.com/view/717633.htm已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。例子:n = 9, k = 1, m = 5【解答】出局人的顺序为5, 1, 7, 4, 3, 6, 9, 2, 8。这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。 p->link=head 阅读全文
posted @ 2011-10-15 09:28 refazy 阅读(680) 评论(0) 推荐(2) 编辑
摘要: 1.把二元查找树转变成排序的双向链表题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。10/ \6 14/ \ / \4 8 12 16转换成双向链表4=6=8=10=12=14=16。首先我们定义的二元查找树节点的数据结构如下:struct BSTreeNode{int m_nValue; // value of nodeBSTreeNode *m_pLeft; // left child of nodeBSTreeNode *m_pRight; // right child of node};// 1:构造二叉查找树;// 2:中 阅读全文
posted @ 2011-10-14 16:36 refazy 阅读(10489) 评论(3) 推荐(4) 编辑