算法与数据结构笔记

来源:互联网 发布:蔬菜交易软件 编辑:程序博客网 时间:2024/05/01 04:10

1. 求两个数的最大公约数: 辗转相除法

int gcd(int x,int y){    if(y==0)       return x;    else       return gcd(y,x%y);}


2. 求一个数的质因数分解:短除法

void f(int x){    while(x>1) {       for(int i=2;i<x;++i){          if(x%i==0) {               cout<<i<<endl;               x=x/i;               break;          }       }    }}

3.next数组的求解方法:

next数组下标从1开始计算
next[1] 肯定是 0 
next[2] 肯定是 1
next[n] 的情况,将前面n-1个字符,计算从首尾开始组成最大的相同子串的长度,如果找到,那么next值是该长度加1,否则next值是1。

举例
next[6]的计算,字符串第六位是 a ,( ababa a ababaa)
将前面的5个字符,从头尾开始取4个组成子串比较,如果不相等,则从首尾取3个字符组成子串继续比较,并以此类推, 如果一直比较到最后一个字符都不相等,那么该next值为1。
4个字符的情况:abab : baba
3个字符的情况:aba   :  aba  此时相等,那么next[6] = 3+1 = 4

4.n个数进栈,可能的出栈顺序有多少种?
卡塔兰数,


0 0
原创粉丝点击