![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
pengfoo
这个作者很懒,什么都没留下…
展开
-
【算法】设计包含 min函数的栈,时间复杂度都是 O(1)
设计包含 min函数的栈。定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。要求函数 min,push 以及 pop 的时间复杂度都是 O(1)以下程序采用顺序链表实现,实现时参考了相关博客,有疏漏之处,欢迎指正。思路:以空间换时间的方法#include#define MAXSIZE 256typedef struct minStackElemen原创 2012-09-27 21:02:32 · 1953 阅读 · 0 评论 -
【算法】用递归颠倒一个栈
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。具体分析可以参考:递归实现颠倒栈下面给出源代码://递归实现颠倒栈#include using namespace std;#include // Add an element to the bottom of a stack:temp原创 2012-10-04 17:33:21 · 2752 阅读 · 0 评论 -
【算法】输入一颗二元查找树,将该树转换为它的镜像
题目:输入一棵二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。要求:用递归和循环两种方法完成树的镜像转换。举例: 8 8 / \ 转换 / \ 6 10 --> 10 6 / \ / \原创 2012-10-02 10:32:25 · 2055 阅读 · 0 评论 -
【算法】输入一个已经按升序排过的数组和数字,在数组中查找两个数字,使得它们的和正好是输入那个数字。
题目:输入一个已经按升序排过的数组和数字,在数组中查找两个,使得它们的和正好是输入那个数字。要求时间复杂度是 O(n)。如果有多对数字的和等于输入,出任意一即可例如输入数组 1、2、4、7、11 、15 和数字 15 。由于 4+11=,因此输出 4 和 11 。#include void findTwoNum(int a[], int n, int dest){ int原创 2012-10-01 20:18:15 · 1518 阅读 · 0 评论 -
【算法】输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序。为了简单起见,我们假设push 序列的任意两个整数都是不相等的。比如输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列,但序列4、3、5、1、2 就不可能是push 序列1、2、3、4、5 的pop 序列。思路:1.首先新建一个栈模拟入栈原创 2012-10-02 17:05:02 · 2440 阅读 · 0 评论 -
【算法】递归实现全排列
具体参考:文章1文章2//全排列的递归实现#include #include void Swap(char *a, char *b){ char t = *a; *a = *b; *b = t;}//void AllRange(char *str, int first, int last){ int i; if (first == last) { sta原创 2012-10-03 21:37:37 · 1287 阅读 · 0 评论 -
【算法】海量数据处理:有一千万条短信,有重复,以文本形式保存,一行一条,找出重复最少的前10条
题目:有一千万条短信,有重复,以文本形式保存,一行一条,找出重复最少的前10条思路:通过哈希表去重并统计出重复次数后,通过堆调整找出重复次数最少的前10条参考文章:http://gengning938.blog.163.com/blog/static/128225381201161994028740/,代码有改动。关于从n(n很大)个数字中查找前k个最小的数的方法,用堆调整的方法,具体原创 2012-10-03 17:19:35 · 5706 阅读 · 1 评论 -
【算法】输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印
题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / \ 6 10 /\ /\5 7 9 11输出8 6 10 5 7 9 11。思路是遍历一个结点时,首先访问它,然后将它的左右子树放入队列中。#include #includ原创 2012-10-01 21:45:42 · 1504 阅读 · 0 评论 -
【算法】判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11因此返回true。如果输入7、4、6、5,没有哪棵原创 2012-10-01 19:35:53 · 908 阅读 · 0 评论 -
【算法】2013创新工场校园招聘笔试题--如何求出带环链表的入口节点
参考文章:http://blog.163.com/song_0803/blog/static/4609759720120910373784/因而,可以在链表头,相遇点分别设定一个指针,每次各走一步,两个指针必定相遇,则相遇第一点为环入口点。从图中可以分析a=(n-1)r+(L-a-x)的含义:a代表在链表头放置的节点p1走到入口点的路程,L-a-x代表相遇点的节点p2走完这么多原创 2012-10-01 10:45:11 · 1260 阅读 · 0 评论 -
【算法】8皇后问题
参考:http://www.cnblogs.com/jillzhang/archive/2007/10/21/922830.html现在有个疑惑,用这种方法如何打印出所有的可能情况? #include#define Bool int#define True 1#define False 0Bool IsSafe(int col,int row,int原创 2012-09-29 19:28:34 · 739 阅读 · 0 评论 -
【算法】在二元树中找出和为某一值的所有路径
参考文章:http://xingyunbaijunwei.blog.163.com/blog/static/7653806720122284428687/输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22 和如下二元树 10 / \原创 2012-09-30 12:40:15 · 1137 阅读 · 0 评论 -
8皇后问题续
接着上篇文章,探讨下八皇后问题:下面是修改后的源码,参考了网友的答案:#include#define Bool int#define True 1#define False 0static count=0;void print(int gEightQueen[])//根据gEightQueen[]中的值,打印出皇后图形{ int outer; int inner;原创 2012-09-29 21:58:32 · 679 阅读 · 0 评论 -
求子数组的最大和
/*题目:输入一个整形数组,数组里有正数也有负数,数组中一个或连续的多个正数,求所有子数组的和的最大值,要求时间复杂度为O(n)很容易理解,当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。基于这样的思路,我们可以写出如下代码。代码不仅求出了最大和,而且记录下了起始点和末尾的坐原创 2012-09-25 22:27:10 · 761 阅读 · 0 评论