前端算法(JS版)
一、算法简述
1.1 为何学习算法
算法现在是程序员标配,一个会算法的程序员无疑在更多的地方占优势。对于前端来说,算法更是敲开大厂的敲门砖,让我们在大厂的面试中占尽优势。同时,掌握算法让我们在解决一些复杂的问题上更加轻松。总而言之,算法——你不得不会。
学习原因:
为了应聘
为了工作
为了参加竞赛
1.2 学习算法的三部曲
- 掌握数据结构与算法的特点及其应用场景
- 刷题使我们从熟悉到掌握算法不可缺少的征途,推荐LeetCode
- 实战:把掌握的算法与数据结构应用到工作中,融会贯通
1.3 如何刷题
- 刷题网站:推荐使用LeetCode
- 刷题顺序:推荐按类型刷题,相当于几种训练
- 重点关注:通用套路、时间、空间复杂度的分析和优化
二、数据结构与算法简介
2.1 数据结构
计算机存储、组织数据的方式。就像我们生活中的锅碗瓢盆。
2.2 算法
一系列解决问题的清晰指令,就像我们做菜的菜谱
2.3 数据结构与算法
- 程序=数据结构+算法
- 数据结构为算法提供服务,算法围绕数据结构操作。
2.4 数据结构分类
- 栈、队列、链表——都是有序的,连成一串的
- 集合、字典——无序的
- 树、堆、图——有链接关系
三、如何刷LeetCode
3.1 LeetCode简介
- LeetCode是一个专注于程序员成长和企业技术人才服务的品牌
- 功能:题库、竞赛、社区和模拟面试等等
3.2 如何在题库中搜索
- 通过题号搜索
- 通过难度、列表、状态、标签搜索
- 通过企业搜索(需要付费)
3.3 如何做题
- 查看题目描述、评论、题解、提交记录
- 设置语言、编辑器选项
- 执行代码、提交代码
- 会用笔记本,查看做题进展
四、时间复杂度
- 是一个函数,用O表示,比如O(1) 、O(n)
- 定性描述该算法的时间
- O(1)
let i=1;
i+=1;
- O(n)
for(var i=0;i<n;i++){
console.log(i)
}
- O(n)=O(1)+O(n),结果去较大的值
let i=1;
i+=1;
for(var i=0;i<n;i++){
console.log(i)
}
- O(n^2)
for(var i=0;i<n;i++){
for(var j=0;j<n;j++){
console.log(i,j1);
}
}
-O(logN)
let i=1;
while(i<n){
console.log(i);
i*=2
}
五、空间复杂度
-
是一个函数,用O表示,比如O(1) 、O(n)
-
算法在执行过程中临时占用存储空间大小的度量
-
O(1)只声明一个变量,很定占用一个内存单元
-
O(n)往list里推送n个值,占用n个内存单元
-
O(n^2)