前言
随便列出一些常见的算法。
一、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;
}
总结
未完~