zoukankan      html  css  js  c++  java
  • 如何学习数据结构与算法? (加油,你可以的)

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

    • 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 小时的时间以后,再次重复做题
    • 不同解法的熟练程度 ——> 专项练习

    刷题第四遍

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

    刷题第五遍

    面试前一周恢复性的训练

  • 相关阅读:
    连续型随机变量
    离散型随机变量
    vue1.0生命周期
    vue2.0生命周期函数
    vue2.0 vue.set()
    vue2.0 vue.extend()的拓展
    vue2.0 自定义指令详解
    vue2.0 v-model指令
    vue2.0排序应该注意的问题
    vue2.0版本指令v-if与v-show的区别
  • 原文地址:https://www.cnblogs.com/ssaylo/p/12676845.html
Copyright © 2011-2022 走看看