0
点赞
收藏
分享

微信扫一扫

常见算法复杂度

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的十进制位数

常见算法复杂度_数组_02

while(n){
n%10 //获得n的二进制中的一位
n=n/2
}

但由于如下表达式,上面两个复杂度只相差了一个常数倍,在计算复杂度的时候,常数倍是忽略不计的,

所以算法复杂度都是O(logn)

常见算法复杂度_i++_03

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

8.复杂度排序

常见算法复杂度_数组_04



举报

相关推荐

0 条评论