🌈 写在前面:
经过两年前端领域的工作和学习,不管是对JS语言的持续了解,还是对前端框架、前端工程化等的进一步学习,总觉得内心缺少一样很重要的东西,阻止我进一步提高,我想那就是算法。算法的劣势,让我在与他人竞争中底气不足,也导致我在去大厂的路上望而却步。内心一直有一个设定,只有扎实掌握基本算法的自己,才算得上一名合格的程序员。提升实力是强大内心的最佳途径,强大的实力才能托起内在的自信。对我来说,克服算法这一块的劣势,才能走的更高更远。
所以,2020年10月 ~ 2021年3月,这半年的时间,我决定在算法思维上训练一番。
此文档结构参照了大佬瓶子君,在此感谢~
🌈 训练计划
- 根据前辈建议,分主题模块刷题,先从二叉树开始
- 工作日每天至少训练一道算法题,具体操作:
- 熟悉总结一遍算法模块知识点
- 把算法题目拷到
issue
,在comment
中写出自己的题解; - 分析自己的答案,对比他人的解答,总结最优解
- 解题步骤:
- 第一步:找临界条件
- 第二步:找特殊情况
- 第三步:一般性的算法
- 第四步:回归分析检查
- 周末花半天的时间对一周所练习的算法进行复习总结
- 计划表
时间 主题 2020.10.07 ~ 2020.10.16 树和二叉树/堆 2020.10.19 ~ 2020.10.31 数组 2020.11.01 ~ 2020.11.5 栈 2020.11.6 ~ 2020.11.10 队列 2020.11.11 ~ 2020.11.24 链表 2020.11.25 ~ 2020.11.30 字符串 2020.12.01 ~ 2020.12.15 哈希表 2020.12.16 ~ 2020.12.30 图 2021.1.4 ~ 2021.1.31 排序算法/查找算法 2021.2.1 ~ 2021.2.28 动态规划/贪心算法/回溯算法 2021.3.1 ~ 2021.3.31 复习所有模块的算法 2021.4.1 ~ 2021.4.30 JS编程题 2021.5.6 ~ 2021.5.31 手写源码
- 数组和链表的比较
- 链表知识小结
- 双向链表小结
- 循环链表小结
- 合并两个有序链表
- 判断一个单链表是否有环
- 反转链表
- 删除链表倒数第 n 个结点
- 求链表的中间结点
- 编写一个程序,找到两个单链表相交的起始节点
- 链表求和
- 接雨水问题
- 树和二叉树知识小结
- 二叉搜索树(BST)
- 自平衡树(AVL)
- 二叉树的前序遍历
- 二叉树的中序遍历
- 二叉树的后序遍历
- 二叉树的层序遍历
- 二叉树的层次遍历
- 计算完全二叉树的节点个数
- 从前序与中序遍历序列构造二叉树
- 二叉树的最大深度
- 二叉树的最近公共祖先
- 平衡二叉树判断
- 路径总和
- 对称二叉树
- 给定一个二叉树, 找到该树中两个指定节点间的最短距离
- 二叉搜索树中第K小的元素