算法杂项~


前言

      随便列出一些常见的算法。

一、O(logn)算法

      如果一个算法用常数时间将问题的大小削减为其一部分(一般为其的1/2),那么该算法的时间复杂度为 O(logn)。

1.1、折半/二分查找(binary search)

      假设对一个已经排好序的 int 数组 array,求某个元素 n 在该数组的下标:

    public static int binarySearch(int[] array,int n){
    
    
        int left=0,right=array.length-1,mid;
        while(left<=right){
    
    
            mid=(left+right)/2;
            if(array[mid]==n)
                return mid;
            else if(array[mid]<n)
                left=mid+1;
            else
                right=mid-1;
        }
        return -1;
    }

1.2、求最大公因数

      欧几里得算法求最大公因数:

    public static int gcd(int m,int n){
    
    
       while(n!=0){
    
      //如果 m 小于 n,那么第一次循环会交换 m 和 n 的值。
           int y=m%n;
           m=n;
           n=y;
       }
       return m;
    }

1.3、幂运算

      代码如下:

    public static int pow(int base,int e){
    
    
        //大致确定结果在 int 范围内,如果数字很大,可能需要采用别的表示方法来模拟(比如字符串)。
        if(e==0)
            return 1;
        if(e%2==0)
            return pow(base*base,e/2);
        else
            return pow(base*base,e/2)*base;
    }

      
      
      
      
      
      
      
      
      
      
      

      
      
      
      
      
      
      
      
      
      
      
      
      
      
      

      
      
      
      
      
      
      
      
      
      
      
      
      
      
      


总结

      未完~

Guess you like

Origin blog.csdn.net/Little_ant_/article/details/121598224