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

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

  • 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 -> Iterationide

    • 递归 Recursion(Divide & Conquer, Backtrace)oop

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

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

    • 动态规划 Dynamic Programming优化

    • 二分查找 Binary Searchspa

    • 贪心 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 小时的时间之后,再次重复作题
  • 不一样解法的熟练程度 ——> 专项练习

刷题第四遍

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

刷题第五遍

面试前一周恢复性的训练

相关文章
相关标签/搜索