- 博客(61)
- 收藏
- 关注
原创 设计模式第五天|代理模式 7-小明买房子 装饰模式 8-咖啡加糖
通过这种方式,Decorator 类就可以使用传递进来的 std::unique_ptr 对象,而且由于 std::unique_ptr 具有独占所有权,它还负责在 Decorator 对象生命周期结束时正确地销毁关联的 Coffee 对象。:Decorator(std::move(coffee)) 是成员初始化列表,用于调用 Decorator 类的构造函数,将 std::unique_ptr 移动到 Decorator 类的 coffee 成员变量中。这是 Decorator 类的构造函数的实现。
2024-02-05 01:26:09
1249
原创 设计模式第三天|建造者模式 4. 自行车加工 原型模式 5. 矩形原型
浅拷贝指的是新对象复制了原对象成员变量的指针,与原对象共享动态分配的内存块;深拷贝指的是复制了原对象的所有成员,包括指向的动态分配的内存,每个成员都有自己的内存副本(新对象不改变成员变量的值时,新对象与原对象指向同一块内存,改动新对象成员变量值时, 新对象成员变量指针发生变动,指向自己的副本内存并对值进行改动,记得是这样)设计模式第三天打卡,复习了很多C++面向对象的知识,对从前从视频上看到的知识理解更加深了哈哈哈,还是得自己动手敲代码学习理解的深啊,加油!当对象作为另一个对象的元素被初始化时。
2024-02-03 00:59:13
761
原创 设计模式第二天|工厂方法模式 2.积木工厂 抽象工厂模式 3. 家具工厂
注意C++默认的构造函数是public的,但不写public时默认的数据和方法是private的,struct默认的数据和方法是public的。注意跟工厂方法模式的区别,工厂方法模式一个工厂生产一类产品,抽象工厂模式一个工厂生产一类产品。设计模式第二天打卡,加油!
2024-02-02 01:11:48
581
原创 设计模式第一天|单例模式 1.小明的购物车
这题注意清单输出顺序,map底层是红黑树,unordered_map底层是哈希表,无法保证输出顺序和输入相同,这里创建了一个vector来保证输出顺序,并使用了emplace_back方法,在向量的末尾直接构造一个元素,而不是先创建一个元素对象再将其复制或移动到向量中(push_back)。另外注意程序中&和const的使用。设计模式第一天打卡,加油!
2024-02-01 01:02:30
553
原创 图论第三天|127. 单词接龙 841.钥匙和房间 463. 岛屿的周长 1971. 寻找图中是否存在路径 684.冗余连接 685.冗余连接II
思路:广搜搜出来直接就是最短路径,深搜还需要判断;广搜相当于先把这一层路径的单词下一步走法都扫出来再走下一步;而深搜找到一条路径就先走到头,再返回来走下一条路径,需要判断路径长度,麻烦。n前需加const,否则用n初始化数组会报错,因为n 是一个可变的值。图论第三天打卡,目前随想录上的图论问题刷完,加油!思路:不用深搜或广搜,遍历就好,不要想复杂。思路:将有向图问题拆解成两个无向图有环问题。另外需要标记位,wordMap,避免死循环。思路:并查集入门,用于解决无向有环图问题。
2024-01-29 17:26:14
936
原创 图论第二天|695. 岛屿的最大面积 1020. 飞地的数量 130. 被围绕的区域 417. 太平洋大西洋水流问题 827.最大人工岛
图论第二天打卡,整体来说套路感挺重的,理解和做起来挺简单的,但写多了也头晕哈哈,加油!思路:dfs,先用map记录原有的每块陆地的大小,再在0处遍历连接陆地,选择最大值。思路:注意终止条件 if (visited[x][y]) return;
2024-01-28 19:43:17
571
原创 图论第一天|797.所有可能的路径 200. 岛屿数量
思路:深搜入门,注意邻接表和邻接矩阵的形式。广搜法,用队列存储,遍序搜寻,替代深搜回溯。图论第一天打卡,加油!
2024-01-27 18:15:16
744
原创 算法训练营总结
在刷题层面上,尽管可能是小的进步,但在自我看来已经是质的提升。刷题上下一步计划就是用几天时间把随想录上剩余的图论部分刷完,然后再汇总地学习算法和八股、继续啃项目、写简历配合着下一轮刷题,投实习,也许时间不够,但还是选择利用有限的时间做不辜负自己,不让自己后悔的事情,无论结果如何,加油!首先,写博客真的是一个好习惯,这两个月我不但用博客记录了刷题笔记,也用它简单地记录了每天发生的事,刷题进度慢了时间耽误在哪了,尽管可能很简短,但能很好地记录自己在一段时间内的生活和学习状态,方便后续对自己做出更好地调整。
2024-01-27 00:49:30
354
原创 算法训练营第六十天打卡|84.柱状图中最大的矩形
单调栈,和接雨水正好相反,是找元素两边第一个比本身小的,数组前后需要各插入一个0,避免递增或递减序列无法正确计算。未来的路还很长,不管结果与否,既然选定了目标,就要坚持坚持坚持,起码不会辜负自己,加油!优化了双指针,在优化过程中用上了之前记录的nexl、nexr中的信息,降低了时间复杂度。优化1(自己优化),依然超时,本质上还是没优化,时间复杂度一样。第六十天打卡,撒花完结;思路:暴力双指针,超时。
2024-01-27 00:06:00
316
原创 算法训练营第五十九天|503.下一个更大元素II 42. 接雨水
文章链接:[代码随想录](https://programmercarl.com/0042.%E6%8E%A5%E9%9B%A8%E6%B0%B4.html#%E6%80%9D%E8%B7%AF)算法训练营第五十九天打卡,看完项目有点学不动了不知道学啥了,看别人的简历和面经心里总是慌慌的,这两天屡屡思路继续学习,不要害怕,不要放弃,加油!思路:暴力双指针,时间超时,注意从左向右遍历时,右侧最大值的记录位置,不要将左边的最大值也记录上了。双指针是按列求的,而单调栈是按行求的,不过感觉理解起来比前一种难一些。
2024-01-26 16:28:44
355
原创 算法训练营第五十八天|739. 每日温度 496.下一个更大元素 I
第五十八天打卡,刚才老师叫去汇报课题进度,整的在家的人有点小慌,做题有点慢,加油!单调栈,用map作索引,注意while循环的判断顺序,让是否未空先判断,避免超界运算。暴力解法,用umap作索引。思路:暴力解法,时间超限。
2024-01-25 16:10:12
453
原创 算法训练营第五十七天|647. 回文子串 516.最长回文子序列
思路:dp[i + 1][j - 1] + 2 这里注意相等长度是加2。第五十七天打卡,今天就能把webserver项目视频学完了,加油!
2024-01-24 15:03:42
482
原创 算法训练营第五十六天|583. 两个字符串的删除操作 72. 编辑距离
思路:和上一题相比,差别在于多了替换,因此dp[i - 1][j - 1] 只需要多加一步即可变为dp[i][j]。第五十六天打卡,今天给周老师写了个冰层项目进展,耽误了一些学习进度,加油!思路:直接记录需要改(增或删)几个,也就是求不公共的子序列。也可以记录最长公共子序列,再减。
2024-01-23 23:00:35
479
原创 算法训练营第五十五天|392.判断子序列 115.不同的子序列
思路:uint64_t是一种数据类型,代表无符号的64位整数。在计算机中,uint64_t可以存储的最大值是2^64-1,即18,446,744,073,709,551,615。在云计算领域中,uint64_t的容量可以应用于各种需要处理大量数据的场景,例如大规模数据分析、机器学习、人工智能等。63-1,即-9,223,372,036,854,775,808到9,223,372,036,854,775,807。long long 是有符号的,在C++中,long long可以表示的整数范围从-2。
2024-01-22 13:46:29
430
原创 算法训练营第五十三天|1143.最长公共子序列 1035.不相交的线 53. 最大子序和
思路:一维数组没法记录全之前地依赖值。二维倒序也不行,因为还要依赖这层前面更新完的元素(dp[i][j - 1]),倒序的话这层前面元素还没更新,也是一维数组行不通的原因。思路:贪心做过,这次用动规方法记录。题目链接:1143.最长公共子序列。思路:和求最长公共子序列一样。第五十三天打卡,加油!
2024-01-20 14:45:02
453
原创 算法训练营第五十二天|300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组
滚动(一维)数组,不等要有赋0操作。理论上说不等也最起码有dp[j - 1]个子字符串相等,但是这个值会影响下一层的判断,若下一层的两元素相等,则会得出错误结果,故不等需要赋0。而每个相等字符串的长度都会有一个元素记录过,无需担心漏记。思路:二维数组,创建数组时多建一层是为了避免初始化,否则就得在循环前先初始化一遍dp[i][0]和dp[0][j]。和背包问题同样 j 的后序遍历是为了避免错误累加。思路:数组存在就至少为一,dp元素初始化为1。思路:连续的话,比较相邻元素即可。第五十二天打卡,加油!
2024-01-20 01:04:58
413
原创 算法训练营第五十一天打卡|309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费
思路:和买卖股票Ⅱ一样的思路,多加了手续费,只不过这次只能用随想录的思路了。验证随想录的方法是真的动规,我之前那个方法本质上还是贪心,只是用了个数组记录了每步的结果。思路:由于多了冷冻期,因此除了要加上冷冻期的状态外,还要将当天卖出股票的状态从不持有股票状态中剥离出来。第五十一天打卡,今晚本来想听项目课,磨蹭太久听不完一节了,先把明天题刷了吧。
2024-01-18 00:22:27
381
原创 算法训练营第五十天|123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV
思路:在上一题的基础上加上一层循环即可,或者再加一个维度变成三维数组,第一个记录第几天,第二个记录第几次买卖,最后一个维度记录买或者不买。感觉还是用二维数组方便些。思路:买卖股票的进阶,按随想录的思路分成5种状态动态规划。每种状态依赖前一天或者加上前一种。第五十天打卡,加油!
2024-01-17 13:47:00
358
原创 算法训练营第四十九天|121. 买卖股票的最佳时机 122.买卖股票的最佳时机II
思路:这种做法(自己做的)是直接取第 i 天的最大收益,而随想录上的做法是把每天分成持有和不持有两种状态并分别记录,最后取最后一天不持有的值。思路:和上一题一样的道理,就是把收益累加起来了。第四十九天打卡,加油!
2024-01-16 13:59:05
388
原创 算法训练营第四十八天|198.打家劫舍 213.打家劫舍II 337.打家劫舍 III
思路:偷到当前这家的金额分两种状态,偷当前这家就是上上家加这家,要不不偷就和上家一样,取个最大值。思路:也是分两种状态,当前节点偷或者不偷,记录两个值,反到根节点,取个最大值(后序遍历)。第四十七天休息,第四十八天打卡。数据库基本操作学完了,今天开始撸项目,加油!思路:掐头去尾,把上一题分两种情况做,取个最大值。
2024-01-15 14:49:09
433
原创 算法训练营第四十六天|139.单词拆分 多重背包
第四十六天打卡,这几天对做项目和学习路线有了新的理解和认识,重点不在看多少,在熟悉和掌握,加油!思路:完全背包,重点在于状态转移方程的条件。思路:多重背包问题,将其拆解为01背包即可。
2024-01-13 13:16:10
507
原创 算法训练营第四十五天|70. 爬楼梯(进阶版)322. 零钱兑换 279.完全平方数
思路:dp[j] 代表装满背包的最少硬币数,这里注意:dp[0] = 0,其它值设为INT_MAX,刚好保证背包可以装满。而求排列,组合问题的完全背包也是一样的原理,有有效数值时其背包一定时装满的。另外注意本题的 数值超界。思路:阶梯总数是背包重量,每次几个台阶是物品,求排列总数。i * i 当成物品即可。第四十五天打卡,加油!
2024-01-12 13:50:30
472
原创 算法训练营第四十四天|动态规划:完全背包理论基础 518.零钱兑换II 377. 组合总和 Ⅳ
目录动态规划:完全背包理论基础Leetcode518.零钱兑换IILeetcode377. 组合总和 Ⅳ动态规划:完全背包理论基础文章链接:代码随想录题目链接:卡码网:52. 携带研究材料思路:完全背包问题,物品可以无限取,即不用考虑是否重复添加,在一维(滚动)数组解法上,将背包遍历变为正序。# include <bits/stdc++.h>using namespace std; void solve(int N, int V){ vector<int>
2024-01-11 19:35:25
458
原创 算法训练营第四十三天|1049.最后一块石头的重量II 494.目标和 474.一和零
代码随想录1049.最后一块石头的重量II思路:和416. 分割等和子集一样,416是求是否能装满,这题是求最多能装多少。
2024-01-11 16:23:49
498
原创 算法训练营第四十二天|动态规划:01背包理论基础 416. 分割等和子集
大体知识能串联起来了,今天开始撸项目背八股,哪不会学哪了,单学效率太低了,争取能在春节后找到个实习,加油!然后一行一行的更新,更新到新物品时,要么就是在 j 重量下放不下,也就是。代表在 j 重量下先空出weight[i]这么大的空间,然后再放如 i 物品,它可能是本来就有这么大空间,也可能是把其它一些物品拿出去后再放入的 i 物品。思路:01背包应用问题,留足背包的容量,也就是最大总和的一半值加一,如果更新到最后在半值重量的背包中能正好装满,就说明数组可以对半分。代表不放入 i 物品。
2024-01-11 12:06:36
474
原创 算法训练营第四十一天打卡|343. 整数拆分 96.不同的二叉搜索树
第四十天休息,四十一天打卡,今天把计网看完了,操作系统前两天把进程线程看完了,明天回学校一趟吃组饭,加油!vector数组给定长度未给初值时。构造函数默认初值设为0。不给长度时不给初值。
2024-01-08 16:17:38
618
原创 算法训练营第三十八天|509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
操作系统和计网今天是过不完了,目标还是定大了,不过估计这周末可以把重要知识过一遍,起码做webserver够用。第三十八天打卡,动规第一天,掌握好五部曲模板,另外今天新号刷题100道纪念。
2024-01-05 15:32:38
359
原创 算法训练营第三十六天|435. 无重叠区间 763.划分字母区间 56. 合并区间
第三十六天打卡,争取5号之前过一遍操作系统和计网,加油!注意是更新到这段字符的最远边界,而不是当这个字符,所以要用。注意直接用res.back()比较更新的操作。
2024-01-03 12:00:56
385
原创 算法训练营第三十五天|860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
使用vector,insert时可能发生扩容拷贝,费时。第三十五天打卡,今天猛学操作系统,加油!区间问题,注意如何排序和更新xend。使用链表,效率比vector快。
2024-01-02 12:03:34
392
原创 算法训练营第三十二天|122.买卖股票的最佳时机 II 55. 跳跃游戏 45.跳跃游戏 II
【代码】算法训练营第三十二天|122.买卖股票的最佳时机 II 55. 跳跃游戏 45.跳跃游戏 II。
2024-01-01 22:55:54
475
原创 算法训练营第三十一天|455.分发饼干 376. 摆动序列 53. 最大子序和
贪心不会就看题解刷吧,不要求太多了,回家这段主要学习基础知识和作项目。昨天拷实验数据,回家折腾一天,今天才补卡。注意设置index–取代双层循环的写法。
2024-01-01 22:48:31
346
原创 算法训练营第三十天|332.重新安排行程 51. N皇后 37. 解数独
这几天太忙没时间刷题学和计算机基础,今天也没健身,明天实验估计又没时间,跨年前估计不会学出太多了;不过还好前一个无关的项目今天结题了,明天是做课题相关实验,也不算浪费时间,一切还是向着好的方向发展,丢掉焦虑,停止内耗,踏实做自己能做的事就好。希望明天实验顺利,跨年那天上午练个肩,下午回家,顺便发个跨年健身的朋友圈(文案想了十几天还没想好哈哈哈,不过图片选好了就一张),然后把今明两天的题补上。今天忙着为明天拍摄实验做调试准备,按着昨天看解析文章的理解,今天又大致看了一遍敲出来了三道题,今天的题没刷。
2023-12-29 23:41:17
362
原创 算法训练营第二十九天|491.递增子序列 46.全排列 47.全排列 II
思路:排列问题,每次递归都从0开始,不用startIndex;另外用used标记一下,跳过本次递归开始时用过的元素。思路:子集问题,不能排序,利用unordered_set去重或者根据题目条件用数组做哈希运算。第二十九天打卡,昨天练的胸痛,今天上午没去健身,把题刷了,今天争取多学一些操作系统,加油!思路:加了一个排序后去重,另外这题树层去重和树枝去重均可。不过还是觉得树层去重更好理解一些,而且效率也是更快的。利用unordered_set去重。
2023-12-27 12:21:20
364
原创 算法训练营第二十八天|93.复原IP地址 78.子集 90.子集II
第二十八天打卡,今天准备户外拍冰实验,下午在给相机绑工装,晚上回去抓紧学点操作系统,看看跨年前这一周连健身带做课题能额外学多少吧,观测一下自己的学习进度,给后两个月做好规划。思路:分割问题,把点的数量作为分割线,点的数量到3就return,在原字符串s上直接进行递归回溯操作。一样,使用used数组或者利用startIndex和i的关系直接在树层上去重。思路:求组合问题和分割问题是收集叶子节点,子集问题是收集所有节点。思路:和子集问题比起来就是需要排序去重,去重思路和。
2023-12-26 21:08:49
437
原创 算法训练营第二十七天|39. 组合总和 40.组合总和II 131.分割回文串
思路:重点在于理解题意,判断一段是回文串就找下一个切割线,不是就把这个切割线开始的切割范围向后挪,如果切割线(也就是startIndex)能够走到字符串最后,说明找到了一组结果;如果切割范围挪到最后也不是回文串,res将不会收录这组path里的数据,path的数据会pop_back()出去并把切割线(startIndex)位置向后挪。去重的逻辑在于纵向(树枝)不去重,横向(数层)去重;注意需要先对数组排序。第二十六天休息,第二十七天打卡,昨晚半夜醒了没睡着,今天上午一直在睡,也没健身,希望今天睡眠好一些。
2023-12-25 16:46:18
403
原创 算法训练营第二十五天|216.组合总和III 17.电话号码的字母组合
s传引用时,每层传出去的是s + letters[i],也就是新的s接收的是原s的地址空间加上一段letter[i], 所以原来的每层s都不会发生改变,保证了回溯的顺利进行。若用值传递也是可以的,就是相当于每层的s都新开了一段地址空间,占用内存变多了,但每层的s也不会发生改变。第二十五天打卡,两道题分两天做的,昨天拍冰层照片+课题组三国杀,C++的小项目得抓紧做了,加油!思路:定义一个数字与字母对应的数组或map,逐层递归回溯。思路:比组合问题多加了一个条件,剪枝时同样可以多剪一处。
2023-12-24 12:39:07
345
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人