您的位置:首页 > 理论基础 > 数据结构算法

算法与数据结构笔记

2015-09-18 16:02 288 查看
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-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个数进栈,可能的出栈顺序有多少种?

卡塔兰数,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: