时间复杂度
时间复杂度,就看带有未知数的循环执行了对少步。
1、O(longN)
2、O(N)
3、 O(NlogN)
4、O(N^2)
越往下越复杂
算法的执行时间与输入值之间的关系
常见时间复杂度:O(1)、O(N)、O(logN)、O(NlogN)、O(M+N)、O(N^2)
O(1) < O(logN) (二分查找) < O(N) < O(NlogN) (排序)< O(N^2) < O(2^n) < O(n!)
O(1):
// 执行常数次,和输入num无关
public static int O1(int num){
int i = num;
int j = num*2;
return i+j;
}
O(N):
public static int ON( int num){
int total = 0; // 执行这条语句时间需要 a
// 执行整个for语句时间需要 num*b
for (int i = 0; i < num; i++) {
total += i; // 执行这条语句时间需要 b
}
return total; // 执行这条语句时间需要 c
}
// 忽略常数,时间复杂度为:num
// 即:O(N)
O(logN):
public static int OlogN(int num){
int i =1;
// 执行整个whiler语句时间需要 b*log_2(num)
while(i<num){
i = i*2; // 执行这条语句时间需要 b
}
return i;
}
/*
i = 1*2*2*2*2.....
循环次数:x
2^x < num
x = log_2(num)
// 时间复杂度为:b*log_2(num)
// 忽略常数:O(logN)
O(M+N)
public static int OMN(int num1,int num2){
int total = 0;
for (int i = 0; i < num1; i++) {
total += i;
}
for (int j = 0; j < num2; j++) {
total += j;
}
return total;
}
O(NlogN)
public static int ONlogN(int num1,int num2){
int total = 0;
int j = 1;
for (int i = 0; i < num1; i++) {
while(j<num2){
total = i+j;
j = j*2;
}
}
return total;
}
O(N^2)
public static int ON2(int num){
int total = 0;
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
total = i+j;
}
}
return total;
}
// O(N^2 + n) --n无限大--> O(N^2)
public static int ON2(int num){
int total = 0;
for (int i = 0; i < num; i++) { // O(N^2)
for (int j = 0; j < num; j++) {
total = i+j;
}
}
for (int i = 0; i < num; i++) { // O(N)
total += i;
}
return total;
}
空间复杂度
算法存储空间与输入值之间的关系
常见的空间复杂度:O(1) < O(N) < O(N^2)
看变量
常量看其与输入值得关系
递归要考虑递归栈
O(1)
//变量实常数,所占空间,与输入值无关
public static int O1(int num){
int total = 0; //常量
for (int i = 0; i < num; i++) {
total+= i;
}
return total;
}
O(N)
// 变量是array、linked、list、递归..,可以存多个数据,是随着输入值的改变而改变。
public static int[] ON(int num){
int[] arr = new int[num]; //变量用数组去存了
for (int i = 0; i < num; i++) {
arr[i] = i;
}
return arr;
}
public static int getResult(int n){
if(n<0){
throw new ValidateException("非法参数");
}
if(n==1 || n==0){
return 1;
}
return getResult(n-1)*n;
}
时间和空间只能二选一
面试时和面试官讲清楚
工作:时间>空间