本文为覃超算法训练营的课程笔记

推荐学习网站

  • 学习数据结构的动画演示网站
  • B站 覃超大魔王
  • Snailclimb/JavaGuide

工欲善其事,必先利其器

  • simple collaborative text
  • IntelliJ 10 tips (YouTube)
  • 小工具要用的很熟
  • 编码指法

以上都是顶尖职业选手区别于普通人的细节体现。

关于编程感觉-道

  1. 找到一种感觉,爱上看别人的代码。
  2. 重剑无锋,大巧不工,看到好的代码马上就想抄下来,同时自己练会学会,并且让自己写出的代码也保持这个样子。
  3. 养成阅读优秀代码的习惯,养成模拟和不断反复写的习惯,不断提高自己的代码。

关于算法学习:

  1. 数据结构不可能一遍就理解,需要反复看10遍20遍才能理解。如果你追求一遍理解,1是懒,2是没有抗挫力。
  2. 一开始可以不求甚解,但是要反复过遍数(五毒神掌)
  3. 拒绝人肉递归
    ​ 不要一层一层的去数,那样会感觉很复杂。
    ​ 为什么很复杂的递归问题,可以通过计算机很简单的几行代码解决?而人看起来就很复杂?
    ​ 因为人类的思维总是去一个一个数,而不是去寻找相似性(即重复性)。
  4. 示例:二叉树递归的复杂度分析
    ​ 时间复杂度:每个结点只访问一次,因此时间复杂度为 O(N),其中 N 是结点数量。
    ​ 空间复杂度:在最糟糕的情况下,树是完全不平衡的,例如每个结点只剩下左子结点,递归将会被调用 N 次(树的高度),因此保持调用栈的存储将是 O(N)。但在最好的情况下(树是完全平衡的),树的高度将是 log(N)。因此,在这种情况下的空间复杂度将是 O(log(N))。

关于栈对于树的递归和迭代的作用
​ 树的递归,可以在的帮助下将递归转换为迭代。

  • 深度优先搜索 -> 栈
  • 广度优先搜索 -> 队列

以下观点要牢记:

  • 链表就是树,树就是图
  • 分支就是动态规划,就是回溯,就是递归

编程之道-关于程序的本质

  1. 化繁为简:先归纳(高中的数学归纳法),后演绎。所有的方法都只有一个方法。整个宇宙就是一个题

  2. 写程序只会用到三种语言。
    a). if-else, switch -> branch
    b). for loop -> iteration
    c). recursion -> divide & conquer
    以上3条,相当于几何世界中5大公理,从它们基础上推演出以下各种各样的算法:递归,搜索,动态规划,二分搜索,贪心,数学。(注意:在大脑中回忆每种算法的思路和解题代码模板)

  3. 面试中所谓的难题:都是来找重复性,且最后是来调用递归的。

  4. 分治可以有重复问题,也可以没有重复问题。如果有重复问题,最好缓存一下,那时候就变成动态规划了。分治和动态规划是有区别的,可以认为:
    分治是一种暴力的动态规划
    动态规划是一种去重的分治,即每次在局部即取得最优解,淘汰次优解的的分治

  5. 递归问题的两种解法
    a). 记忆化搜索(LRU cache作为缓存)
    from functools import lru_cache
    @lru_cache(None)
    对于别的语言,可以开一个map或者数组。如果不用lru-cache,也就是不用递归,那就要写循环递推了,即动态规划。
    b). 动态规划
    ​ 递归->动态规划,即为 从上到下的人脑思维模式 -> 计算机从下到上的递推模式。

学过计算机和没有学过计算机的区别:

一个好问题:某些问题人类的脑子都想不明白,还要人写出程序,这怎么可能

我想给大家讲一点,这个在程序里是非常正常的,而且要训练一种思路。大家以后把算法掌握了,80%以上的面试题,以及解决业务上高难度的问题,都是那种用思维很难思考,但是你掌握好它里面的套路,或者它的重复性,用程序非常好的解决。希望大家一定要掌握这种思维。
为什么?因为程序很傻,它不会有很多的逻辑和智能的内容,它只可能去做if else,for loop和recursion。后两者就是不断的重复做一件事情。
所有你认为难的题目,它本质上都具有重复性。最关键是找重复性。而业务代码,很多if else处理业务逻辑,大部分用蛮力解决。

其他:

张一鸣 阅读《普通生物学》,找到世界的本质。他做两个产品

  1. 公司出的对外的各种产品,受众为外面的大众。
  2. 公司本身,给所有2C,今日头条,抖音等

所有的东西化繁为简,变为普适的。

训练思维模式:找到问题的本质(待整理)

爬楼梯问题变形
# 条件一:步长有三种,1,2 ,3
# 条件二:相邻步伐数不能相同

322 零钱兑换
爬楼梯:上11级台阶,每一可以走1,2步,有多少种走法?
注意:有多少走法,最少需要走多少步和走了多少步是不同的问题。

  • 有多少走法:f(n) = f(n-1) + f(n-2)
  • 最少需要走多少步:f(n) = min(f(n-1), f(n-2)) + 1
  • 走了多少步:f(n) = sum(f(n-1), f(n-2)) + 2

相当于爬楼梯问题变种:
​ 上11级台阶,每一可以走1,2,5步,问最少可以走多少步?

对于1,2两种步数,走到台阶n的最小步数:
​ f(n) = min(f(n-1), f(n-2)) + 1

coins问题(最少需要的银币数):
​ f(n) = min(n - coins[i]) for i in coins + 1

int ans = INT_MAX; // 为什么要这么写?

最少steps:
​ f(n) =sum(f(n - steps[i])) <- for i in steps

其他:

  • 灵魂提问:
    因为x =1, y = 2, 所以z = x + y = 3。这个,没有问题吧?
  • 看到一个问题。哇,太烧脑,想不明白,找重复性。好不好
  • Serendipity
    谷歌翻译:the occurrence and development of events by chance in a happy or beneficial way.
    它没有中文的翻译,或者翻译的不好。
    覃超的解释:“你经常去做一些事情,一直一直去做一些事情。这些事情你并不知道后果是好,还是不好。但是你一直坚持着,在一种偶然的情况下,最后梦想成真了。或者一个机缘巧合的原因,你得到了一个非常好的事情,但这个事情是由于你之前一直在坚持做一些事情找来的

[经验分享] 覃超算法训练营学习笔记相关推荐

  1. [经验分享] 覃超直播课学习笔记

    2020年7月2日,覃超线上直播课,秋招知识问答. 字节跳动招什么样的人? 技术面试: 技术优秀 计算机基础 系统设计 代码和语言 算法和数据结构 HR面试: 坦诚正直 持续学习 团队协作 责任心,主 ...

  2. 算法训练营学习笔记1

    算法训练营学习笔记 贪心算法 心算法总是做出当前最好的选择,期望通过局部最优选择得到全局最优的解决方案.从问题的初始解开始,一步歩地做出当前最好的选择,逐步逼近问题的目标,尽可能得到最优解: 贪心本质 ...

  3. 【算法训练营学习笔记-Week01】数组和链表的比较以及LeetCode的做题反思

    数组和链表的异同 相同点:两个都是线性的数据结构,是非常基础的数据结构,是后续高级数据结构的前提,例如树.图. 队列和堆栈是操作受限的线性数据结构,前者先进先出,后者先进后出.这两种数据结构的底层既可 ...

  4. 算法训练营学习笔记2

    树的应用 树 树(Tree)是n (n ≥0)个节点的有限集合,当n =0时,为空树:当n >0时,为非空树.任意一棵非空树,都满足:①有且仅有一个被称为根的节点:②除根节点外的其余节点可分为m ...

  5. 【算法训练营学习笔记-Week06】一遍不懂就多刷几遍

    字典树(Trie ) 温故知新: 树的定义 二叉树,前中序列遍历,层次遍历 DFS和BFS 二叉搜索树(BFS)定义,左子树都小于根,右子树都大于根,中序遍历是有序序列 实际问题:搜索引擎中自动联想 ...

  6. 计算机视觉算法——Transformer学习笔记

    算机视觉算法--Transformer学习笔记 计算机视觉算法--Transformer学习笔记 1. Vision Transformer 1.1 网络结构 1.2 关键知识点 1.2.1 Self ...

  7. 聚类算法评价指标学习笔记

    聚类算法评价指标学习笔记 本文列举常用聚类性能度量指标,并列出相应代码与参考资料 聚类性能度量大致分两类,一类将聚类结果与某个"参考模型"(reference model)进行比较 ...

  8. 阿里云趣味视觉AI训练营学习笔记Day 5

    阿里云趣味视觉AI训练营学习笔记Day 5 学习目标 学习内容 前言 一.创建人像卡通化应用 二.应用配置 三.后端服务开发部署 四.小程序前端开发 阿里云高校计划,陪伴两千多所高校在校生云上实践.云 ...

  9. ECS 7天实践训练营学习笔记——DAY5

    ECS 7天实践训练营学习笔记--DAY5 今日份学习--阅读阿里云<7天学会ECS> 前言 一. ECS概述 二. ECS产品架构 三. ECS管理软件 四. 基于ECS的各种搭建 今日 ...

最新文章

  1. 【GTSAM】GTSAM学习
  2. How to Make a Computer Operating System
  3. ibatis插入正确但查询不出数据的问题
  4. 分布式服务防雪崩熔断器,Hystrix理论+实战
  5. poj 1092 Farmland (Geometry)
  6. 闪电模型数学_最经典的数学模型
  7. DFS和BFS总结和代码演示(详解)
  8. php变量的数据类型
  9. 20175223 MySQL
  10. linux uuid/uuid.h
  11. 7 php 内存泄漏_PHP 内存泄漏分析定位
  12. C语言显示USDOS汉字库
  13. 洛谷P2347 砝码称重 [2017年4月计划 动态规划01]
  14. 2021深圳杯数学建模D题分析
  15. and design 如何引入阿里图表矢量库 创建自定义icon
  16. FinalShell下载安装教程
  17. TI15.4STACK协议栈解读
  18. 欧22转债,永02转债上市价格预测
  19. 3个办法解决:微信删除的聊天记录怎么恢复?
  20. iOS之一个超赞的视频直播、第三方库,直播看这个就够了,支持RTMP推流,美颜直播

热门文章

  1. 电脑便签小工具分享 居然可以这般贴心好用
  2. 神奇的口袋——Java
  3. 类的继承编程训练1—储蓄卡与信用卡
  4. IPV6重复地址检测(DAD)
  5. 同步 fork(Syncing a fork)
  6. DBCA静默安装Oracle数据库
  7. 国内外17个学术论文网站推荐,记得收藏哦!
  8. 推荐大数据Spark必读书目
  9. 有所为有所不为,泽塔云异军突起的背后
  10. 无capwap隧道的分布式网关实现思路