
Algorithm
文章平均质量分 76
FlyingIceCS
这个作者很懒,什么都没留下…
展开
-
《编程之美》读书笔记(一):中国象棋将帅问题
这一个系列的读书笔记本来是写在优快云的博客上的,本来是不应该再费力气转移到这里来,但是总觉得对于好书应该给予更多的支持。更何况邹老师和其他作者把部分书稿费拿出来资助贫困小学,实在是应该大力提倡。所以决定把我的部分Blog内容搬迁到这里来,不能全拿过来只是因为评论不能贴图,呵呵。希望也能以此为契机敦促自己把原本计划中的读书笔记写完,也算完成自己的一个心愿。 大转载 2010-04-11 22:29:00 · 1195 阅读 · 1 评论 -
寻找数组中最小的K个元素
<br />快速排序思想的经典变形--先找到数组的pivot,然后使用二分法进行递归找到数组中第K小的元素,算法时间复杂度与快排一样为O(nlogn);然后线性扫描原数组找到所有不大于它的元素,此步骤复杂度为O(n),因而算法总时间复杂度为O(nlogn) + O(n) = O(nlogn)。实现中需要注意边界条件,很容易写错导致程序死循环。以下是C++完整实现:<br /> <br />#include <iostream>using namespace std;template<class T>原创 2011-05-20 21:57:00 · 1096 阅读 · 0 评论 -
寻找二叉树中和为固定值的从根节点到叶节点的所有路径
<br />题目:输入一个整数和一棵二元树。<br />从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。<br />打印出和与输入整数相等的所有路径。<br />例如 输入整数22和如下二元树<br /> 10 <br /> / / <br /> 5 12 <br /> / / <br />4 7<br />则打印出两条路径:10, 12和10, 5, 7。<br /> <br />struct BinaryTreeNode {原创 2011-05-20 20:55:00 · 2656 阅读 · 0 评论 -
实现包含min函数的栈
<br />要求实现一个带有min函数的堆栈,且push,pop以及min操作时间复杂度为O(1)。<br />思路:<br />在数据栈的基础上需要另一个辅助堆栈来存储当前最小元素的位置。新元素进栈时,将该元素与当前最小元素比较,若比当前最小元素还要小,则将新栈顶位置入辅助栈;否则仍然将原最小元素位置入辅助栈。出栈操作很简单,直接对两个栈进行pop操作。以下是该思路的C++实现,实现中采用了STL的deque容器,原因在于deque支持index操作。<br /> <br />#include <dequ原创 2011-05-20 17:25:00 · 1172 阅读 · 0 评论 -
Convert Binary Search Tree to an Ordered Double Linked List
<br />输入: 一棵二叉查找树<br /><br />输出: 与二叉查找树对应的有序双向链表<br /><br />要求:不允许额外生成节点,只允许调整指针指向。例如:<br /> <br /> 10<br /> / /<br /> 6 1<br /> / / / /<br /> 4 8 12 16<br /><br />要求变换后输出<br /><br /><br />4=6=8=10=12=14=16<br /> <br />个人思路:<br /><br原创 2011-05-20 00:01:00 · 1145 阅读 · 0 评论 -
编程之美笔记——金刚坐飞机
<br />昨天看到一道题目,问题描述是这样的:<br /> <br />100个人排队上飞机,飞机上有100个座位,每个人对应一个座位,队首的人是个瞎子,上飞机后随便坐,后面的人都尽量找自己的座位,如果已经被占,则随机做,问第100个人坐到自己座位的概率。<br /> <br />开始想从第一个人开始递推,结果此路不通。后来google了一下发现有人说这是编程之美上的题目,遂找了份电子版翻了翻,里面“金刚坐飞机”这一小节讲述了该问题的解法。看了其分析过程得到解题启发,上题其实就是书中得出的一般结论的特殊情原创 2010-11-14 00:09:00 · 4548 阅读 · 4 评论 -
Range Minimum Query
<br />Range Minimum Query is used on arrays to find the position of an element with the minimum value between two specified indices. This problem can be solved in many different ways, such as dynamic programming, segment tree, ect. Here shows the C++ imple原创 2010-09-16 20:34:00 · 895 阅读 · 0 评论 -
输出指定范围内的所有质数
#include #include #include using namespace std;void printPrimerUpTo(std::ostream& os,int upper);int getDigitNum(int upper);int main(void) { ofstream outfile("primer.txt"); if(!outfile) { cerr原创 2010-06-17 17:16:00 · 5984 阅读 · 0 评论 -
《编程之美》读书笔记(二):“求二进制数中1的个数”扩展问题
面试题目:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数。扩展问题:给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?把两个整数A, B异或,然后又回归到判断1的个数,代码如下:int Count(int a, int b) { int num = 0; int转载 2010-04-11 22:53:00 · 1736 阅读 · 0 评论 -
求子数组最大和
<br />输入一个整形数组,数组里有正数也有负数。<br />数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。<br />求所有子数组的和的最大值。要求时间复杂度为O(n)。<br />例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,<br />因此输出为该子数组的和18。<br /> <br />int MaxSubArray(int T[], int size) { int max = 0, tmp原创 2011-05-20 17:44:00 · 730 阅读 · 0 评论