![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 75
IDnotExist
这个作者很懒,什么都没留下…
展开
-
如何生成全排列
[问题描述]:给定一个数组,如何(按照字典序)生成它的全排列?比如(1,2,3),它的全排列就是(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),(3,2,1). 在数学上,两个排列的大小定义为第一个不相等元素的大小关系,也就是说 当且仅当。 1. 递归 观察我们手动生成全排列的过程,首先固定第一个元素:先写1开头的1xx,然后写2开头的2xx,然原创 2013-03-01 10:40:25 · 602 阅读 · 0 评论 -
删除数组中的重复元素
[问题描述]:如何使用O(1)空间,删除数组中的重复元素?比如A=1111222334566,删除之后就是123456。也就是模仿STL的unique()。 使用三个指针:p,q,r。r表示当前处理的位置,区间[p,q)表示重复元素的范围(左开右闭)。每次将[p,q)的第一个元素(也就是*p)赋给r,然后继续处理下一个重复元素区间,直到数组全部处理完毕。 #include using n原创 2013-03-11 14:52:41 · 735 阅读 · 0 评论 -
二叉树的各种周游
[问题描述]:如何周游一棵二叉树。 二叉树的周游分为深度优先周游(DFS)和广度优先周游(BFS)。 对于深度优先周游,左中右的排列共有3!=6种,但是先访问右子树后访问左子树不符合人们的习惯,所以就剩下三种:先序(中左右),中序(左中右),后序(左右中)。每种周游都有递归和非递归实现,非递归是利用栈实现的。 后序周游的非递归版本稍微复杂点,因为访问完某个子树之后,还要判断是从哪个子树返回的原创 2013-03-10 21:14:15 · 1588 阅读 · 0 评论 -
中缀表达式与后缀表达式
[问题描述]:如何计算一个表达式的值? 表达式的表示形式有中缀、前缀和后缀三种形式。中缀表达式就是我们平时使用的表达式,按操作符的优先级进行计算:先乘除后加减,有括号先算括号里面的。中缀表达式便于人进行计算,但不便于计算机解析。后缀表达式没有优先级,计算规则简单,因此便于计算机进行解析。先将中缀表达式转换为后缀表达式,然后再计算。 后缀表达式的计算过程为: 从左到右依次扫描输入的后缀表达式,原创 2013-03-02 23:04:45 · 469 阅读 · 0 评论 -
出栈顺序与Catalan数
[问题描述]:对于一个栈,已知元素的进栈序列,判断一个由栈中所有元素组成的排列是否是可能的出栈序列。比如,进栈序列为1 2 3 4,则可能的出栈序列有4 3 2 1,1 4 3 2等,而1 4 2 3就不是合法的出栈顺序。 解决的办法是,模拟这个进栈和出栈的过程即可。假如入栈的序列为A,出栈的序列为B。对于A的每次进栈,就判断栈顶元素与B序列的顶部元素相等。如果二者相等,那么就表示A出栈原创 2013-02-26 11:51:45 · 1662 阅读 · 0 评论