1.O(n)-线性查找法
for(int i=0;i<data.length;i++)
if (data[i].equals(target))
return i;
2.O(n^2)
一个数组中可以组成哪些数据对
for(int i=0;i<data.length;i++)
for(int j=i+1;j<data.length;j++)
//获取到一个数据对(data[i],data[j])
遍历一个n*n的二维数组
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
//遍历到A[i][j]
注意:
遍历一个a*a的二维数组,且a*a=n,那么算法复杂度为O(a^2)=O(n)
for(int i=0;i<a;i++)
for(int j=0;j<a;j++)
//遍历到A[i][j]
3.O(logn)
数字n的二进制位数
while(n){
n%2 //获得n的二进制中的一位
n=n/2
}
数字n的十进制位数
while(n){
n%10 //获得n的二进制中的一位
n=n/2
}
但由于如下表达式,上面两个复杂度只相差了一个常数倍,在计算复杂度的时候,常数倍是忽略不计的,
所以算法复杂度都是O(logn)
4.O(√n)-数字n的所有约数
下面的写法时间复杂度是O(n)
for(int i=0;i<n;i++)
if(n%i==0)
//i是n的一个约数
但下面的写法,时间复杂度就是O(√n),不用遍历所有数
for(int i=0;i*i<n;i++)
if(n%i==0)
//i是n的一个约数
//n/i也是n的约数
//同时就找到两个约数,不用遍历所有数
5.O(2^n)-长度为n的二进制数字,例如(11111)
长度为5,每个位有两种数字,不是0就是1,所以是2^n
6.O(n!)-长度为n的数组的所有排列
7.O(1)-判断数字n是否是偶数?
return n%2