一些算法总结

1、用一个数据结构实现   
  if   (x   ==   0)   y   =   a;   
   else   y   =   b;   
    j[]   =   {a,b};   

  y=j[x];   


2、判断链表是否有环,使用快慢指针如果 两指针 指向同一目标则有环

    判断循环链表,直接一个指针从头到尾,如果有结点 == head则为循环链表 


3、反转字符串
 void     reverse(   char       *   str)     {   
                 char     tmp;   
                 int     len;   
               len     =     strlen(str);   
                   for   (   int     i   =   0   ;i   <   len   /   2   ;   ++   i)     {   
                       tmp   =   char   [i];   
                       str[i]     =     str[len   -   i   -   1   ];   
                       str[len   -   i   -   1   ]   =   tmp;   
               }     

     }    


4、位图处理,需要大内存


5、求一个整形中1的位数
 int     f(   int     x)     {   
               int     n   =   0   ;   
                 while   (x)     {   
                       ++   n;   
                     x   &=   x   -   1   ;   
             }     
               return     n;   

     }     


6、汉诺塔问题


     原理:
递归编程的经典问题。
要搬移有n个碟片,可以考虑先搬移 (n-1)个碟片, 因为第n个碟片最大,放在最下面,根据规则,它不会妨碍其他(n-1)个碟片的移动,根据这个思路,就可以处理(n-2),(n-3)等。。。
最后简化到只剩一个碟片,简单移动一下即可。

递归编程代码及其简单,但比较抽象。


   代码:
public static void hanoi(int n,char a, char b, char c){
if( n> 0){
hanoi(n-1,a,c,b);
move(n,a,c);
hanoi(n-1,b,a,c);
}
}
public static void move(int n,char from, char to){
System.out.println("move " + n +"  from  "+ from + " ------>"+to);
}

public static void main(String[] args) {

hanoi(3,'A','B','C');
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值