动态规划概念理解
学动态规划真的是比较令人头大,概念挺难理解的说实话,要反复的咀嚼才能明白一二,记录一下我的学习成果。 一、概念 ✅ 转移方程:根据步数选项写出 dp[i] = dp[i-a] + dp[i-b] ✅ 边界条件:推不动的手动给,到不了的是 0,dp[0]=1 是约定 ✅ 负数处理:i-k < 0 就扔掉 ✅ 特殊处理:坏台阶强制 dp=0 ✅ i 和 n 的区别:i 是变量,n 是具体目标 二、例子 用爬楼梯的例子来辅助理解这些概念 题目条件: 楼梯总高为 n=4(地面是 0,目标阶梯是 4) 跨步规则:只能跨 1 步 或 2 步(a=1 or b=2) 其中阶梯 3 是坏的 1、定义 dp[i] 到底是什么?从地面出发刚好到第 i 阶时,一共有多少种不同的走法。注意是刚好,超过的不行。 2、转移方程(最后一步怎么来的 — 逆向思维)dp[i] = dp[i-1] + dp[i-2] 想象你处在第 i 阶,是怎么跨上来的?因为规则规定只能跨 1 步 or 2 步,只有两种方法: 从 i-1 跨一步到 i 从 i-2 跨两步到 i 既然到达 i-1 有 ...
红黑树插入和删除 关键点变色与旋转自平衡
昨天学习了红黑树,它是二叉搜索树的优化版本,避免了二叉搜索树在插入排好序的集合时退化成链表的问题。 一、红黑树的五条准则 要么黑要么红 根节点一定是黑的 叶子节点(NIL)一定是黑色的 红色节点的两个子节点必须是黑的(即不能连续红) 从任意节点到其每一个叶子节点,黑色节点的数量相同 二、插入操作示例1、单旋(LL型)构建一颗 [7, 3, 1] 的红黑树 第一步:插入 7新节点默认红色,但根节点一定是黑色,所以改成黑色。 第二步:插入 3默认红色,父节点是黑色,没有连续红,直接插入。 第三步:插入 1插入后出现连续红(3和1均为红色),且叔叔节点为 null(黑色)。 他们由于插入元素 1 与父节点 3 方向相同(左-左),触发右单旋: 祖父节点 7 与父节点 3 整体右旋 3 上浮为子树根,变黑色 7 下沉为右孩子,变红色 2、双旋(LR型)构建一颗 [10, 18, 7, 15, 16] 的红黑树 第一步:插入 10 第二步:插入 18 第三步:插入 7 第四步:插入 15出现连续红(18 和 15),叔叔节点 7 为红色,触发变色: 叔叔节点 7 变...
我的第一篇博客
这是我的第一篇博客,想简单的介绍一下这个博客的内容以及后续会发布的内容,主要以记录学习软工踩过的坑为主,或者学习心得,后续可能会发布一些工具的推荐或者使用心得等,内容不限,想到什么发什么,就这样。