算法与数据结构笔记

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个数进栈,可能的出栈顺序有多少种?
卡塔兰数,


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值