如何学习数据结构与算法? (加油,你可以的)

精通一个领域(数据结构与算法)

    1. Chunk it up 切碎知识点

    数据结构(https://naotu.baidu.com/file/b832f043e2ead159d584cca4efb19703?token=7a6a56eb2630548c)

    庖丁解牛 把数据结构的一个又一个知识点分解开来

    It is important to view knowledge as sort of a semantic tree —— ElonMusk

    覃超建议 把数据结构这么分:

    • 一维数据结构
      • 基础:数组array (string),链表 linked list
      • 高级:栈stack, 队列queue, 双端队列deque, 集合set,映射map(hash or map), etc
    • 二维数据结构
      • 基础:树tree,图graph
      • 高级:二叉搜索树 binary search tree(red-black tree, AVL),堆heap,并查集disjoint set,字典树Trie,etc
    • 特殊
      • 位运算Bitwise,布隆过滤器BloomFilter
      • LRU Cache

    算法(所有这些复杂的算法,其实到了最后就是找它的重复单元是什么???)(https://naotu.baidu.com/file/0a53d3a5343bd86375f348b2831d3610?token=5ab1de1c90d5f3ec)

    • if-else, switch -> Branch

    • for, while loop -> Iteration

    • 递归 Recursion(Divide & Conquer, Backtrace)

    • 这里做个分割 下面的就是一些高级一点的算法

    • 搜索 Search:深度优先搜索 Depth first search,广度优先搜索Breadth first search,A*, etc

    • 动态规划 Dynamic Programming

    • 二分查找 Binary Search

    • 贪心 Greedy

    • 数学 Math,几何 Geometry

      注意:在头脑中回忆上面每种算法的思想和代码模版

      (动手绘制脑图去)

  • Deliberate Practicing 刻意练习

    • 基本功练习(基本功是区分业余和职业选手的根本)
    • 基础动作的分解训练和反复练习 ——>>最大的误区(如果你做一个算法题,如果你只做一遍,这就是你进行练习和切题的最大误区,这是远远不够的)
    • 刻意练习——过遍数(五遍刷题,五毒神掌)
    • 练习缺陷、弱点地方走出自己的舒适区(枯燥 无味 烦躁 就是成长)一只脚踏在舒适区之外
    • 职业化训练 CSGO 开一些专项练习的地图(自己就练过233333,无论是CS还是CS go)
    • 奥沙利文是真的牛逼
    • 别怕动态规划啥的 经过几十题的练习 肯定就很熟练了
  • Feedback 反馈

    • 即时反馈
    • 主动型反馈(自己去找)
      • 高手代码(GitHub, LeetCode, etc)
      • 第一视角直播
    • 被动式反馈(高手给你指点(现在这点对于我来说有点难啊,只能多去找朋友了))
      • code review

    LeetCode上面有很多别人写的非常好的代码

刷题的方式(切题四件套)

  • Clarification(多看几遍题目 && 和面试官多沟通,确保自己对题目的理解是对的)

    把题目看清楚 题目要干嘛 很重要

  • Possible Solutions

    所有可能的想法。不要只用想到的第一种解法去解。要去用所有可能想到的方法,从中找出最优解法

    • compate (time / space)
    • optimal (加强)
  • Coding(多写)

  • Test cases(测试用例要多写几个,给面试官大人感觉,自己要有始有终)

五毒神掌

刷题第一遍

  • 五分钟:读题 + 思考 (如果基础薄弱 可以给自己10分钟 最多15分钟)这里不能略过
  • 有思路 直接做 直接写 || 超时 ——>> 直接看解法!注意!多解法,比较解法优劣(理解学习和运用算法 不是让你去造轮子)
  • 背诵、默写这样好的写法(并不是死记硬背即可,先背诵记住了之后,一般来说肯定就能理解了。很多题目以后看到就条件反射了)(不能打击自己的积极性)

刷题第二遍

  • 马上自己写(一开始可能会有bug 没关系 debug debug debug 修改修改修改) ——>LeetCode提交
  • 多种写法、体会 ——>优化!(最重要的是执行时间)

刷题第三遍

  • 过了24 小时的时间以后,再次重复做题
  • 不同解法的熟练程度 ——> 专项练习

刷题第四遍

  • 过了一周之后: 反复回来练习相同的题目

刷题第五遍

面试前一周恢复性的训练

猜你喜欢

转载自www.cnblogs.com/ssaylo/p/12676845.html
今日推荐