如果一个算法用常数时间(O(1)将问题的大小消减为其一部分),该算法就是O(logN);若使用常数时间只是把问题减少一个常数的数量,则是O(N)
如果 m >n ,m mod n < m/2
1、折半查找
while (low <=high)
{
int mid = (low + high)/2;
if (a[mid].compareTo(x)<0)
low = mid + 1;
else if (a[mid].compareTo(x) > 0)
high = mid - 1;
else
return mid ; //find
}
return not_found
2、求最大公约数
public static long gcd (long m,long n)
{
while (n != 0)
{ long rem = m %n;
m = n;
n = rem;
}
return m;
}
3、求幂
public static long pow(long x ,int n)
{
if (n == 0)
return 1;
if (n == 1)
return x;
if (isEven(n))
return pow(x * x ,n/2)
else
return pow(x*x,n/2)*x
}