博主这几天面试总会被问到算法相关知识,关键博主面试的是西安测试岗位,现在测试门槛都这么高了吗。。。各种手撕算法
所以下决心恶补一下数据结构,不定时更新,喜欢的胖友可以点个关注哦~
那就先从最基本开始看吧
一、时间复杂度计算
时间复杂度:定性描述该算法的运行时间
这种只执行一次的,时间复杂度为O(1)
<script>
let i = 0;
i += 1
</script>
这种执行n次的,时间复杂度为O(n)
<script>
for (let i = 0;i < n;i += 1){
console.log(i);
}
</script>
当然如果前面是执行一次的,后面是执行n次的这种组合,其时间复杂度依旧是O(n),O(1)+O(n)=O(n)
O(n)*O(n)=O(n^2)
<script>
for (let i = 0; i < n; i += 1){
for(let j = 0;j < n; j += 1){
console.log(i,j);
}
}
</script>
O(logN) //2的多少次方为n
<script>
let i = 1;
while (i < n){
console.log(i);
i *= 2;
}
</script>
二、空间复杂度
算法在运行过程中临时占用存储空间大小的量度
O(1)//单个变量占用的内存为1
<script>
let i = 0;
i += 1;
</script>
O(n)//占用了n个内存单元
<script>
const list = [];
for(let i = 0;i<n;i += 1){
list.push(i);
}
</script>
O(n^2) //n的矩阵