摘要: 1 /* 2 题目:输入一个单向链表,输出该链表中倒数第 k 个结点。链表的倒数第 0 个结点为链表 3 的尾指针。 4 链表结点定义如下: 5 struct node 6 { 7 int data; 8 struct node *next; 9 };10 typedef struct node* PtrToNode; 11 typedef PtrToNode Position;12 typedef Position List;13 */14 #include 15 #include 16 #include "./List.h"17 using namespace std; 阅读全文
posted @ 2013-08-24 17:29 老司机 阅读(438) 评论(8) 推荐(0) 编辑
摘要: 1 /* 2 *给定一个长度为n的整数数组,只允许用乘法不允许用除法,计算任意(n-1)个数的子数组组合中乘积最大的一组 3 */ 4 5 #include 6 #include 7 #include 8 using namespace std; 9 10 int64_t max_product(int *array, int len)11 {12 assert(array != NULL);13 14 int zero_num = 0;15 int max_neg, min_pos;16 min_pos = max_neg = array[0... 阅读全文
posted @ 2013-08-23 19:42 老司机 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 1 (1)使用vector之前必须包含头文件:#include 2 3 (2)namespace std{ 4 template > 6 class vector; 7 } 8 vector的元素可以是任意类型T,但必须具备assignable和copyable两个性质。第二个template参数可有可无,用来定义内存模型,缺省的模型是C++标准程序库提供的allocator。 9 10 (3)在末端附加或删除元素时,vector的性能相当好。可是如果你在前端或中部安插或删除元素,性能就不怎么样了,因为操作点之后的每一个元素都必须移动到另一个位置,而每... 阅读全文
posted @ 2013-08-20 21:20 老司机 阅读(543) 评论(0) 推荐(0) 编辑
摘要: 1 (1)要运用STL的算法,首先必须包含头文件,某些STL算法用于数值处理,因此被定义于头文件 2 3 (2)所有STL算法都被设计用来处理一个或多个迭代器区间,第一个区间通常以起点和终点表示,至于其他区间,多数情况下你只需提供起点便足以,其终点可以自动以第一个区间的元素数量推断出来,调用者必须保证这些区间的有效性。 4 STL算法采用覆盖模式而非安插模式,所以调用者必须保证目标区间拥有足够的元素空间,当然你也可以运用特殊的安插型迭代器将覆盖模式改变为安插模式。 5 6 (3)尾词_if:如果算法有两种形式,参数个数都相同,但第一形式的参数要求传递一个值,第二形式的参数要求... 阅读全文
posted @ 2013-08-17 19:10 老司机 阅读(1619) 评论(2) 推荐(1) 编辑
摘要: 1 //通过寻找从根至节点的路径,取两个节点路径上的最后一个相同的节点,即为最低公共祖先 2 #include 3 #include 4 #include 5 #include "BinarySearchTree.h" 6 #include 7 using namespace std; 8 9 void printv(const vector& v)10 {11 vector::const_iterator cit = v.begin();12 while(cit != v.end())13 coutdata& v, const int x)... 阅读全文
posted @ 2013-08-17 10:53 老司机 阅读(535) 评论(0) 推荐(0) 编辑
摘要: Problem C: The Dragon of LoowaterOnce upon a time, in the Kingdom of Loowater, a minor nuisance turned into a major problem.The shores of Rellau Creek in central Loowater had always been a prime breeding ground for geese. Due to the lack of predators, the geese population was out of control. The peo 阅读全文
posted @ 2013-08-12 20:21 老司机 阅读(220) 评论(0) 推荐(0) 编辑
摘要: Splay Tree 是二叉查找树的一种,它与平衡二叉树、红黑树不同的是,Splay Tree从不强制地保持自身的平衡,每当查找到某个节点n的时候,在返回节点n的同时,Splay Tree会将节点n旋转到树根的位置,这样就使得Splay Tree天生有着一种类似缓存的能力,因为每次被查找到的节点都会被搬到树根的位置,所以当80%的情况下我们需要查找的元素都是某个固定的节点,或者是一部分特定的节点时,那么在很多时候,查找的效率会是O(1)的效率!当然如果查找的节点是很均匀地分布在不同的地方时,Splay Tree的性能就会变得很差了,但Splay Tree的期望的时间复杂度还是O(nlogn)的 阅读全文
posted @ 2013-08-12 13:33 老司机 阅读(704) 评论(0) 推荐(0) 编辑
摘要: (1)使用map/multimap之前必须包含头文件:#include 并且和所有的关联式容器一样,map/multimap通常以平衡二叉树来完成(2)namespace std{ template , class Allocator = allocator > > class map; template , class Allocator = allocator > > class multimap; }第一个template参数被当作元素的key,第二个当作元素的value。key... 阅读全文
posted @ 2013-08-10 10:32 老司机 阅读(660) 评论(0) 推荐(0) 编辑
摘要: /*在二元树中找出和为某一值的所有路径(树)题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数 22 和如下二元树 10 / \ 5 12 / 7则打印出两条路径:10, 12 和 10, 5, 7我们定义的二元查找树 节点的数据结构如下:#define Element intstruct TreeNode{ Element data; struct TreeNode *left; struct TreeNode *right;};typedef ... 阅读全文
posted @ 2013-08-09 21:41 老司机 阅读(232) 评论(0) 推荐(0) 编辑
摘要: (1)为了运用priority_queue,你必须包含头文件:#include(2)在头文件中priority_queue定义如下:namespace std{ template , class Compare = less > class priority_queue;}第一个template参数代表元素型别,带有默认值的第二个参数用来定义priority_queue内部存放元素所用的实际容器,缺省采用vector。第三个参数定义出“用以搜索下一个最高优先元素”的排序准则,缺省下是以operator <作为比较标准。实际上priority_... 阅读全文
posted @ 2013-08-03 08:21 老司机 阅读(910) 评论(0) 推荐(0) 编辑