一些算法总结

来源:互联网 发布:淘宝卖项链的白金 编辑:程序博客网 时间:2024/05/05 07:42
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');
}

原创粉丝点击