极客大学算法训练营第一课
如何精通一个领域
Chunk it up 切碎知识点
庖丁解牛
脉络连接
任何知识体系都是一颗树,想要掌握一个知识体系关键是要把这些知识变成一棵树状结构。
人脑是内存是用来计算的,不是硬盘,是不适合进行存储东西的。
数据结构
一维
基础:数组 array(string),链表 linked list
高级:栈 stack,队列 queue,双端队列 deque,集合 set,映射 map(hash or map)……
二维:
基础:树 tree,图 graph
高级:二叉搜索树 binary search tree(red-black tree,AVL),堆 heap,并查集 disjoint set,字典树 Trie,……
特殊:
位运算 Bitwise,布隆过滤器 BloomFiter
LRU Cache 注意:了解每个数据结构的原理和代码框架 数据结构脑图
算法
基础的三大算法:
if-else,switch——>branch(分支)
for,while loop——>iteration(循环,迭代)
递归 Recursion(Divide & Conquer,Backtrace)
分支,循环,递归这三部分组成了所有算法和数据结构的基石。
任何高级的算法和数据结构到最后都会变为最基础的分支、循环、递归。寻找重复单元,基于这些重复单元来泛化高级的数据结构。
部分高级的算法:
搜索 Search:深度优先搜索 Depth first search(DFS),广度优先搜索 Breadth first search(BFS),A*,……
动态规划 Dynamic Programming
二分查找 Binary Search
贪心 Greedy
数学 Math,几何 Geometry
注意:在头脑中回忆上面每种算法的思想和代码模板
算法脑图
Deliberate Practicing 刻意练习
职业化运动
基本功是区别业余和职业选手的根本
基础动作的分解训练和反复练习->最关键的点
乒乓球
台球
滑雪
如果是玩游戏,比如说 dota,需要用到一些技巧,比如控兵,游走,推塔,打野,反补……
想要达到职业的水平,必须将每一个部分单独拿出来进行练习,经过不断的反复练习和刻意练习之后,最后能够达到顶尖的水平。
所以无论是哪一个项目,都需要不断的练习,过遍数,才能成为顶级的高手!
练习的方法、量化指标
刻意练习——过遍数
练习缺点、弱点地方
不舒服、不爽、枯燥
生活中例子:乒乓球、台球、游戏等
对自己的弱项进行练习,跳出舒适区,反复练习。
Feedback 反馈
Feedback
即时反馈
主动型反馈(自己去寻找)
看高手写代码(GitHub,LeetCode,……)
第一视角直播(bilibili)
被动式反馈(高手给你指点)
code review
教练看你打,给你反馈
切题四件套
Clarification(说明问题的解法)
Possible solutions(找到可以解决的方法)
compare(time/space)(比较时间复杂度和空间复杂度)
optimal(加强)(找到最佳的解法)
Coding(多写)
Test cases(举出测试用例)
五步刷题法
刷题第一遍
5~15 分钟:读题+思考,如果没有思路进入下一步
直接看解法:注意!多解法,比较解法优劣
背诵,默写好的解法
刷题第二遍
马上自己写——>LeetCode 提交 不断的修改 bug,检查问题
多种解法比较、体会->优化
刷题第三遍
过了一天后,再重复做题
不同解法的熟练程度——>专项练习
刷题第四遍
过了一周,反复回来练习相同题目
刷题第五遍
面试前一周恢复性训练
评论