# algorithmic-demo **Repository Path**: Zzr4/algorithmic-demo ## Basic Information - **Project Name**: algorithmic-demo - **Description**: 力扣练习 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-12 - **Last Updated**: 2024-01-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 算法-Algorihm #### 时间复杂度 **大O符号表示法**:`T(n)=O(f(n))` fn:每行代码执行次数之和,O表示正比例关系 ~~~javascript for(i=1; i<=n; ++i) // 1次 { // 符号忽略 j = i; // n次 j++; // n次 } // 符号忽略 统计:1+2n => n数量无限大时,1可以忽略,系数2也可以忽略,所以可以简化为 => n 时间复杂度:T(n) = O(n) ~~~ **常见的时间复杂度量级** `常数阶O(1)`:没有循环等复杂结构,消耗的时间并不随着变量的增长而增长 ~~~javascript let a = 1 let b = 2 ++a b++ let sum = a + b ~~~ `对数阶O(logN)`: ~~~javascript let i = 1 while(i < n) { i = i * 2 } ~~~ `线性阶O(n)`:一般是一层循环 `线性对数阶O(nlogN)`:将时间复杂度为对数阶的代码循环n遍 `平方阶O(n²)`:再循环一遍复杂度为O(n)的,相当于双层循环 `立方阶O(n³)`:平方阶类似 `K次方阶O(n^k)`:平方阶类似 `指数阶(2^n)` #### 空间复杂度 对一个算法在运行过程中临时占用存储空间大小的一个量度,用S(n)表示 **常见空间复杂度类型** `O(1)`:和时间复杂度O(1)一样,所需要的空间不随某个变量n的大小变化 ~~~javascript int i = 1; int j = 2; ++i; j++; int m = i + j; ~~~ `O(n)`: ~~~javascript int[] m = new int[n] for(i=1; i<=n; ++i) { j = i; j++; } //第一行new伊戈尔数组,数据占用大小为n,后面代码虽然循环但是没有再分配空间,所以空间复杂度为O(n) ~~~