- 博客(64)
- 收藏
- 关注
原创 Code Practice Journal | Day59-60_Graph09 最短路径(待更)
Dijkstra & Bellman_Ford
2024-08-31 21:52:47
274
原创 Code Practice Journal | Day58_Graph08 Topological Sorting
在一个有向无环图(DAG)中,根据节点的依赖关系,对所有的节点进行线性排序的算法。以KamaCoder 117.软体构建。拓扑排序的结果不一定是唯一的。
2024-08-30 15:46:07
196
原创 Code Practice Journal | Day57_Graph07 Minimum Spanning Tree
给定的图中选择一些边,使边连接图中所有节点但不成环,形成的子图即为生成树。不在:此边加入生成树,并合并两个节点所在连通分量。从队列中选择权重最小的边,并检查这条边是否连接了一个未访问的节点。是:将该节点标记为已访问,加入已访问节点集合。所有可能的生成树中,权重和最小的生成树即为最小生成树。依次选择边,检查边的两个节点是否在统一连通分量中。已访问节点集合到未访问节点集合的最短距离。使用并查集来管理连接节点并检查是否成环。将所有连接到已访问节点集合的边加入队列。选择一个起始节点,标记为已访问。
2024-08-29 22:09:20
289
原创 DS | 并查集 Disjoint Set Union
查找(Find):查找某个元素所属集合的根节点,用于判断两个元素是否在同一个集合内。若 'parent[ i ] == i ',那么 'i' 为这个集合的根节点。1、为了加速查找操作,通过将路径上所有的节点直接连接到根节点,降低树的高度。rank:记录了每个集合根节点的“秩”(rank),即树的近似高度。rank不同:rank小节点连接到rank大的节点,rank无需更新。父节点:节点 'i' 的父节点为 'parent[ i ]'2、Find(查找):查找一个元素所属集合的根节点,递归实现。
2024-08-26 23:58:13
382
原创 Code Practice Journal | Day53_Graph04
【代码】Code Practice Journal | Day53_Graph04。
2024-08-25 22:35:33
364
原创 Code Practice Journal | Day52_Graph03
【代码】Code Practice Journal | Day52_Graph03。
2024-08-24 21:01:18
315
原创 LeeCode Practice Journal | Day49_MS02
不为栈底时:height.Length - st.Peek() - 1。建议算面积不要一步到位,清晰表达每个数值,重点是矩形宽度。不为栈底时:i - st.Peek() - 1。为栈底时:heights.Length。但本质上,都是左边界 - 右边界 -1。找最大矩形的思路比接雨水稍微绕点。
2024-08-21 21:55:13
322
原创 LeeCode Practice Journal | Day48_MS01
每次压入新元素要将所有小于新元素的元素全部弹出,保持栈顶到栈底单调递增。将循环体内的while循环写成了条件判断。
2024-08-19 19:19:33
169
原创 LeeCode Practice Journal | Day45_DP12
替换操作:dp[ i-1, j-1 ] + 1 替换word1[i]为word2[j],用0 - i-1子串转换 word2 0-j-1 子串。t[ i ] == s[ j ]:包含两种情况:取t[ i ]:dp[i-1,j-1] / 不取t[ i ]:dp[i-1,j]t[ i ] == s[ j ]:包含两种情况:取t[ i ]:dp[i-1,j-1] / 不取t[ i ]:dp[i-1,j]1、dp[i,j]:word1 0-i 子串转换尾word2 0-j 子串所需的最小步数。
2024-08-17 15:09:44
236
原创 LeeCode Practice Journal | Day46_DP13
当子串首尾元素不相同时,不应该直接同时删除首尾元素,而应该在去除首元素和去除尾元素两者间取最大值。感觉直接计算包含回文子串个数算不出来,干脆求每个子串是否为回文串。总体思路和上题比较相似,但产生了一些误区。
2024-08-17 11:34:57
213
原创 LeeCode Practice Journal | Day44_DP11 子序列问题
1、dp[ i ][ j ]:text1 0-i 子串和text2 0-j 子串的最长公共子序列。dp[i,j] : 以text1[ i ],text2[ j ]结尾的?dp[ i ,0 ]:0-i 子串不包含nums[ i ] 的最大子序和。dp[ i ,1 ]:0-i 子串包含nums[ i ] 的最大子序和。dp[0,1] 和 dp[0,0]都要初始化为第一个元素。要判断两个字符串长度。还是最长公共子序列的变体。初始化第一行和第一列。3、初始化:(错误)
2024-08-15 18:06:52
272
原创 LeeCode Practice Journal | Day43_DP10
上题的变体,与nums[i]前每一个连续的元素比较变为前一个元素比较。2、返回值不是dp[i],是dp数组中的最大值。1、数组元素要初始化为1。
2024-08-14 12:02:23
317
原创 LeeCode Practice Journal | Day42_DP09 股票问题
比我第一反应要复杂,因为冷冻期的条件在第一次卖出后才成立,就分成了第一次买入和之后买入的情况。dp数组初始化:第0天的各种持有状态用的都是第0天的价格。昨天最后一道固定次数股票交易的抽象。比较简单,注意计算fee的位置。做出来了但是很杂乱。
2024-08-13 12:16:14
235
原创 LeeCode Practice Journal | Day41_DP08
1)第 i 天卖出:dp[ i-1 ][ 0 ] + price[i]dp[ i ][ j ]:第 i 天 0-4 这五种状态持有的最大金额。dp[ i ][ 1 ]:第 i 天不持有股票所获得的最大金额。dp[ i ][ 0 ]:第 i 天持有股票所获得的最大金额。2)第 i-1 天就已经不持有:dp[ i-1 ][ 1 ]2)第 i-1 天就已经持有:dp[ i -1][ 0 ]1)第 i 天买入: -price[i]股票问题——固定次数买卖。股票问题——单词买卖。股票问题——多次买卖。
2024-08-12 12:05:43
302
原创 LeeCode Practice Journal | Day39_DP07
因为父节点知道其子节点,而子节点看不见其父节点,决定了遍历顺序为从下到上。第 i 家偷:dp[ i- 2 ] + value[ i ]将环转化为两种情况,即选择考虑首元素和选择考虑考虑尾元素。1、dp[ i ]:包括第i家在内,最多可以偷多少钱。3、初始化:dp[ 0 ] = value[ 0 ]思路还是比较直接的,就是判断有点麻烦。理所当然的觉得每隔一家偷一次。第 i 家不偷:dp[ i-1 ]
2024-08-11 12:36:50
211
原创 LeeCode Practice Journal | Day38_DP06
对每个位置 i 遍历所有可能的结束位置 j,若dp[ j ]为true,且字符串从 j 到 i 的子串再字典中,则dp[ i ]为true。1、dp[ i ]:字符串s的前‘i’个字符是否可以被拆分成字典中的单词。2、dp[ 0 ] = true,空字符串拆分为空单词。不能凑成的情况设为-1,每一次取值都要判断。gpt(可能优化)版。
2024-08-10 12:43:58
244
原创 LeeCode Practice Journal | Day37_DP05
有N件物品和一个容量为W的背包,第 i 件物品的重量是weight[ i ],价值为value[ i ],每件物品都有无限个,求解使用背包物品价值总和达到最大的装包方案。注意dp[0]需要初始化为1。
2024-08-09 22:13:34
242
原创 LeeCode Practice Journal | Day36_DP04
1049. 最后一块石头的重量 II - 力扣(LeetCode)代码随想录 (programmercarl.com)背包问题的难点:看不出为啥是背包问题。。。
2024-08-08 20:07:18
175
原创 LeeCode Practice Journal | Day35_DP03
有n件物品和一个最大负重为w的背包。其中第i件物品的重量是weight[i],价值是value[i]。每件物品只能用一次,求使包内物品价值最大的背包方案。
2024-08-06 23:59:23
272
原创 LeeCode Practice Journal | Day34_DP02
1、确定dp数组及下标含义2、确定递推公式3、dp数组初始化4、确定遍历顺序5、举例推导dp数组。
2024-08-05 22:53:44
477
原创 LeeCode Practice Journal | Day32_DP01
1、确定dp数组及下标含义2、确定递推公式3、dp数组初始化4、确定遍历顺序5、举例推导dp数组。
2024-08-03 12:13:32
297
原创 LeeCode Practice Journal | Day31_GA05
加入新数组的条件是发重叠区间,遍历完成时最后一个数组还没有加入。思路很清晰,对数组的操作稀烂,细节上也出现很多问题。results应为List<int[]>重叠时右边界扩为两个区间中较大的那个。思路想出来了,代码四处漏风。边界相同也视为重叠;
2024-08-02 22:53:38
312
原创 LeeCode Practice Journal | Day30_GA04
理解是否重叠只和当前区域的左边界与上一区域的右边界的关系有关。重叠的时候怎样移除可以使覆盖范围尽可能小。先排序再计算重叠区域?
2024-08-01 22:04:37
355
原创 LeeCode Practice Journal | Day29_GA03
先按身高排序,再按ki排序,这样后面的人往前移动不会影响前面的身高序列。从左往右、从右往左两次遍历取最大。判断大小用的是得分数组。注意找零时优先花十块钱。
2024-07-31 13:19:26
275
原创 LeeCode Practice Journal | Day28_GA02
能跳完的条件判定:cover >= nums.Length - 1。本来要算最高峰值和最低峰值的差值和,注意学会拆分。拆成每一天,只要股票涨了,就算我们赚的。思路比较清晰,不断更新覆盖范围。贪得是每一步尽可能走的远。可以直接重复排序+取反的过程。也可以加入条件判断优化。每次都选最小的数取反。
2024-07-30 12:26:46
150
原创 LeeCode Practice Journal | Day27_GA01
没有考虑小孩数量少于饼干数量的情况导致索引超出范围。我考虑的找拐点的情况太过于复杂了。做贪心的题感觉在做脑筋急转弯。子序列是由原始序列删除元素得到的。思路错误:认为遇见负数就重新计算。
2024-07-29 11:51:08
228
原创 LeeCode Practice Journal | Day25_Backtracking04
皇后不能互相攻击的限制:不能同行/同列/同斜线。指的是当前棋盘上所有皇后,而不是上下两行。同一树枝使用数组标记元素是否已选过,同一树层使用HashSet去重。排列问题,使用数组或哈希表记录元素,也算一种树枝去重?2、StringBuilder列表初始写法。递增子序列指在数组原顺序下的。判断当前棋盘是否有效的条件。2、子序列至少有两个元素。HashSet同层查重。
2024-07-28 17:03:04
356
原创 LeeCode Practice Journal | Day24_Backtracking03
当子串为0时,应当同时判断子串长度为1,“00”,“000”转换为整数也是0.。实际写的时候踩了无数细节上的坑,谁能想到sb只能传入str来创建新的实例呢。c#中sb是引用类型,不可以用赋值语句进行拷贝,如下写法是错误的。遍历到结尾且字串个数为4,得到有效地址,不为4结束递归。子串个数已经为4了但还没有遍历到结尾,结束递归。如果写成如下,那么subsb也是需要回溯的。子集+去重,想直接复制粘贴了。2、判断子串是否有效。
2024-07-26 17:33:27
350
原创 LeeCode Practice Journal | Day23_Backtracking
当遍历到数组最后一个元素时,进入下一轮递归,先判定结果是否有效,再判定是否溢出数组。就是组合问题的一种转换,每一层选第i个元素就是生成从起始位置到i的字串。需要一个去重的操作,同一层相同元素不重复取。不同要求下的组合,可以进行一下总结。注意终止条件的顺序,错误顺序如下。
2024-07-25 22:16:42
305
原创 xLua | xLua Framework | 2 加载
根据资源的依赖关系递归加载所有需要的资源包,并最终加载目标资源,加载完成后调用回调函数处理加载资源。
2024-07-24 16:08:55
366
原创 LeeCode Practice Journal | Day22_Backtracking01
去取值的思路很像之前做过的n数之和,不同之处在于本题组合元素的数量为k,不确定,只能使用递归。将判断列表元素是否完整当作终止条件之一写在了前面,逻辑有些混乱。1、注意int.Parse方法参数是字符串而非字符。比上一题多了点条件判断。
2024-07-24 12:18:15
420
原创 xLua | xLua Framework | 1 打包
使用AssetDatabase.GetDependencies获取指定资源的依赖项存储在files数组中。使用LINQ查询过滤files数组,去除脚本文件和指定文件自身。文件信息:文件路径名 | bundle名 | 依赖文件列表。获取文件相对Unity/Assets文件夹的相对路径;劣势:bundle数量多,小包模式:首次下载稍慢。优势:bundle数量少,小包模式:首次下载快。AssetBundle输出路径;AssetBundle资源路径;获取和打包依赖项,生成版本文件。项目Assets完整路径;
2024-07-23 14:23:41
833
原创 LeeCode Practice Journal | Day_21 Binary Tree08
在怎么取每次的根节点的时候纠结了一会,对平衡二叉树的递归性认识不够。因为遍历到一个节点想要知道所有值大于其的节点的值,所以从大向小遍历。大于/小于区间时直接返回了左/右子树,而没有对子树进行修剪。若节点值小于区间,则其左子树均小于区间。
2024-07-23 12:35:25
339
原创 LeeCode Practice Journal | Day20_Binary Tree07
整个算法的逻辑用自然语言描述是若目标在节点的左子树则对左子树递归,在右子树则对右子树递归,插入节点操作只创建了新节点,没有让父节点指向新节点,忽略了回溯。删除节点的左子树成为右子树的最左节点的左子树。递归的像子树中插入节点,并返回插入节点的子树。删除节点的父节点指向右子树。递归的查找左右子树的条件判断更加简单了。怎么样简洁的进行删除操作纠结了好一会。以为需要记录一个pre节点。需要判断右子树是否存在。
2024-07-22 12:06:09
554
原创 LeeCode Practice Journal | Day18_Binary Tree06
本来的做法考虑的比较复杂,但其实count只分两种情况,重置与增加,遍历到第一个节点和值第一次出现的节点时重置,注意重置为1,不是第一个节点且值与上一个节点相同时增加,如下代码。在for循环中,pre指针初始值为null,遍历第一个节点时初始化,在二叉树递归时其实是一样的。验证搜索树的进阶,二叉树中的双指针,思考过程中发现容易弄混递归向下传播和向上回溯的过程。简单的思路遍历一遍然后用哈希表统计,但那跟二叉搜索树的性质就没有关系了。还是利用双指针在遍历的时候同时统计,思路比较清晰,但需要注意的细节比较多。
2024-07-21 11:49:00
518
原创 Unity | AssetBundle
Unity中的一种特殊资源包格式,用于存储和分发游戏资源。这些资源可以包括模型、纹理、音频文件、预制体、场景等。AssetBundle允许开发者在游戏运行时动态加载和卸载资源,从而实现灵活的资源管理。
2024-07-19 23:24:26
1045
原创 LeeCode Practice Journal | Day17_Binary Tree05
编译器的职责是确保所有可能的执行路径都返回值。即使你知道在逻辑上所有路径都覆盖了返回情况,但编译器并不会进行这种逻辑推理,它只会根据结构进行检查。加一个return null 或者最后一个判断条件省略直接搜索右子树就可以通过,为啥呢。两者为null或有一者为null都不需要再继续合并(后续的情况已经确定了)左子树所有节点均小于,右子树所有节点均大于根节点。构建二叉树类题目,本质还是分割+递归,比较顺畅。二叉搜索树中序遍历得到的是单调递增序列。终止条件:不需再继续递归下去的情况。注意左右子树递归的条件判断。
2024-07-19 17:56:07
549
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人