# 学习指导
# 知识体系
以思维导图和列表的形式展现
# 思维导图
正在完善中~
敬请期待~
# 列表
数据结构
- 数组
- 链表
- 栈
- 队列
- 字符串
- 集合
- 字典和散列表
- 递归
- 树-二叉搜索树-红黑树-堆
- 图
算法
- 排序算法
- 搜索算法
# 学习资料
# 学习步骤/ 参考资料
- 《学习JavaScript数据结构与算法》对应部分;
- 极客时间-王争-数据结构与算法之美 (opens new window)
- 王争-JavaScript-GitHub
- 极客时间-覃超-算法面试通关40讲 (opens new window)
- 慕课网-JavaScript版 数据结构与算法 (opens new window)
- 哔哩哔哩-JavaScript数据结构与算法-coderwhy
- 掘金小册-修言-前端算法与数据结构面试:底层逻辑解读与大厂真题训练 (opens new window)
- leetcode--参加 leetcode 周赛、和企业合作的项目
- 剑指offer
# 约定
每一部分的内容如果没有特殊情况,分为以下几部分
- 介绍
- 题目
- 题目来源-指明出处-如果在多个资源中出现,也应标出
- 分析-思路-引导
- 题解-多种解法-明确大O复杂度
- 做题过程中如果有错误要进行记录,避免下次再犯
- 总结-思考,解题关键点
做题记录
一般有以下可选项
- 刷题的时间,一刷,二刷
- 做题过程中如果有错误要进行记录,避免下次再犯
- 自己的一些想法/疑问
# 数据结构与算法
# 介绍
什么是数据结构
- 数据结构就是在计算机中,数据的存储和组织方式。
常见的数据结构较多
- 每一种都有其对应的应用场景,不同的数据结构的不同操作性能是不同的;
- 有的查询性能很快,有的插入速度很快,有的是插入头和尾速度很快;
- 有的做范围查找很快,有的允许元素重复,有的不允许重复等
- 在开发中如何选择,要根据具体的需求来选择
什么是算法
- 算法是描述解决问题的方法。
- 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
《大话数据结构》
注意:数据结构与算法与语言无关,常见的编程语言都有直接或间接的使用上述常见的数据结构。
# 为什么要学习数据结构与算法
- 基础知识就像是一座大楼的地基,它决定了我们的技术高度。那技术人究竟都需要修炼哪些“内功”呢?我觉得,无外乎就是大学里的那些基础课程,操作系统、计算机网络、编译原理等等,当然还有数据结构和算法。
王争
可能你学到这里的时候, 已经感觉到数据结构的一些复杂性, 但是如果你仔细品味, 你也会发现它在设计时候的巧妙和优美, 当你爱上它的那一刻, 你也真正爱上了编程.
coderwhy
# 如何学习数据结构与算法
学习过程中:
- 刻意练习
- 番茄工作法
- 列出问题,先思考,自己想答案,再看答案
- 用一个比较小的数据集对所写代码进行模拟
- 不断反思之前自己所做的题目,看是否有更优雅的解法
- leetcode 题解,可以看看别人的解题思路,对照自己的,进行完善
- 做题过程中如果有错误要进行记录,避免下次再犯
- 思考的时间要逐渐减少,不要死磕,看别人的思路,自己尝试写代码-因为如果是面试,有时间限制
- 边学边练,适度刷题
- 多问、多思考、多互动
- 打怪升级学习法
- 知识需要沉淀,不要想试图一下子掌握所有
王争
# 精通一个领域-覃超
- 切碎知识点
- 建立知识体系
- 刻意练习
- 反馈
- 完善知识体系
三分学,七分练
# 切题四件套-覃超
- clarification 询问题目细节,边界条件,可能的极端错误情况
- possible solutions 所有可能的解法都和面试官沟通一遍
- 时间/空间复杂度
- 寻找最优解
- coding 多写代码
- test cases 测试用例
# 五毒神掌
五遍刷题法--过遍数
- 【1】刷题第一遍
- 5分钟:读题+思考(如果基础薄弱,可以10分钟,最多15分钟)
- 直接看解法:注意!多解法,比较解法优劣
- 背诵+默写好的解法,反复很多遍
- LeetCode国际站
- 【2】刷题第二遍
- 马上自己写-->leetcode提交
- debug--修改--通过
- 多种解法比较、体会(比较重要的是执行时间)-->优化
- 【3】刷题第三遍
- 过了一天(24h)后,再反复做题
- 不同解法的熟练程度-->专项练习
- 【4】刷题第四遍
- 过了一周:反复回来练习相同题目
- 【5】刷题第五遍
- 面试前一周(自己的情况而定)恢复性训练
# 一些
做算法题的最大误区:只做一遍
思想?
- 升维
- 空间换时间
懵逼的情况,应该怎么办?
- 暴力?
- 基本的情况如何解决?
- 找最近重复子问题
- 指针(双指针、多指针)
- 先排序
- 合适的数据结构
因为我们在写程序的时候
- if...else...
- for
- while
- recursion(递归调用)
不断重复
数组知识点 →