自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 知识图谱详细建立过程

根据收集到的数据,定义知识图谱中的实体和关系。实体可能包括樱桃树、樱桃品种、栽培技术、病虫害等;关系可能包括生长周期、适宜气候、病虫害防治方法等。:把定义的实体和关系导入到neo4j中,再去提取实体和关系,提取后的数据导入到图数据库中。先进行定义实体、关系,再提取实体、关系。

2024-03-12 21:59:10 1021

原创 代码随想录训练营总结篇

一直以来的学习让我发现算法也没有我之前想的那么难,也没有那么简单,每天都坚持有没做下来,更多的时候是在一天补了好几天的课,把题做完的感觉是很舒服,有的时候看题解会有灵光一现醍醐灌顶的感觉,也有自己慢慢做AC的爽,也有题太难无奈的叹气。但是之后还需要复习和巩固,有时候已经感受到之前掌握的不牢固了。买了《代码随想录》,昨天总结动规,看到书已经翻到了最后一页,也是松了一口气,终于过完一遍了。我想我自己刷题可能到树,到回溯或者到动规可能就会坚持不下来或者混乱了。这一段的刷题结束了,底气也慢慢有了,之后继续加油吧!

2024-03-01 10:58:10 111

原创 【Day61】代码随想录之单调栈_84柱状图中的最大矩形

求当前左边第一个比他小,有一个比他小的元素。所以,单调栈是单调递减的,左边第一个比它小的是遍历过的,栈里,右边第一个比他大的是当前正在遍历的元素。第一个元素左边比他更小的是边界,最后一个元素右边比他更小的边界。计算结果需要三个元素,所以加入首尾的0作为补充成第三元素,实施计算结果的逻辑。找比当前柱子左右比他更矮的柱子,从而确定柱子的宽,当前柱子的高度是长。怎么形成单调递减的单调栈?原数组的首尾为什么加0?怎么找到左右矮的下标?

2024-03-01 10:42:28 184

原创 【Day61】代码随想录之单调栈_503.下一个更大元素Ⅱ_42.接雨水

在温度的基础上扩展数组的遍历顺序是循环遍历的。在记录第一轮的遍历结果后还需要用栈里的元素和数组的元素继续比较,所以需要增加一次遍历,数组有最大值,至少遇到最大值单调栈里的剩余元素就可以解决,所以再增加一次遍历就可以得到结果。为什么遇到 栈顶小于当前遍历元素 使用while弹出比当前遍历元素更小的值:因为雨水只要有空隙就可以计算面积。栈顶小于当前遍历元素:找到了右侧的第一个比他大的值,弹出栈顶作为中间值,此时的栈顶作为右侧的值。要找当前元素左侧和右侧第一个比它大的值,所以单调栈的单调是从栈顶到栈底递增的。

2024-03-01 10:36:13 369

原创 【Day62】代码随想录之单调栈_739. 每日温度_496.下一个更大元素 I

和温度一样要找出右侧第一个比当前元素大的值,但是在找的时候需要查询当前元素在nums1中在不在,在的话保存值,而不是距离。因为用到查询是不是在nums1中存在,unordered_map<int, int>哈希表的底层逻辑查找效率是O(1),保存nums1中的数组下标和数组元素。单调栈是栈里是数组的下标,下标对应的数组元素是有序的。根据栈里的单调,当前遍历元素和栈顶一直抵消,直到栈顶元素大于遍历元素。,这可能会超,我试了试,确实超了,用一个很大的全都一样的数组就超了。栈顶元素大于遍历元素:入栈保留。

2024-03-01 10:19:35 295

原创 动态规划总结

保持的状态dp[i][0]和卖出时机Ⅱ一致,不保持状态需要加入手续费dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i] - fee);

2024-02-29 15:43:51 1965

原创 【Day59】代码随想录之动态规划_647回文子串_516最长回文子序列

判断一个字符串里面的有多少个回文串,需要二维dp数组,dp[i][j]表示字符串s的[i, j]之间有多少个回文字符串。当s[i] == s[j]的时候,有可能是回文串,i = j 或者 i和j相差一个时是回文串,如果i和j相差的大于1,则需要判断[i+1, j-1]是否是回文串了。= s[j]的时候,s的[i, j]肯定不是回文串,这也表示dp的初始化是false。和上一题回文子串不同的地方在于这次的回文子序列不要求是连续的。所以还采用和上一题一样的方法使用二维的dp数组。

2024-02-28 18:48:50 458

原创 【Day59】代码随想录之动态规划_583两个字符串的删除操作_72编辑距离

当if(word1[i-1] == word2[j-1]) dp[i][j] = dp[i-1][j-1] + 1;相等两者子串长度的最大值在以i-2结尾和j-2结尾的基础上+1,不相等则取i-1和j-2与i-2和j-1最长子串的最大值。进而递推公式dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1;三个操作中的最小的步数。

2024-02-28 17:19:08 849

原创 【Day58】代码随想录之动态规划_392判断子序列_115不同子序列

所以当s[i-1] == t[j-1]时候,dp[i][j]肯定包含dp[i-1][j-1]这是把s结尾的i-1和t结尾的j-1去除,是否可以加上呢?首先我想到用二维的dp数组,行表示字符串s,列表示字符串t,dp[i][j]表示s [0, i-1]与t [0, j-1]是否是子序列,dp的类型是bool类型,初始化全为false,但是由于bool类型只能表示是 或者 不是,没办法提供额外信息,所以在更新dp的时候,递推公式是dp[i][j] = dp[i-1][j-1];

2024-02-28 15:51:54 1906

原创 【Day57】代码随想录之动态规划_1143最长公共子序列_1035不相交的线_53最大子数组和

根据dp[i][j]的含义,为什么是表示text1中[0, i-1]和text2中[0, j-1]的最长公共子序列,而不是[0, i] 和 [0, j]。因为刚开始初始化dp[i][0], dp[j][0]如果是后者,则初始化需要让text1的第一个元素和text2的所有元素对比更新dp[0][j],同样用text2的第一个元素和text1的所有元素比较是否相等更新dp[i][0]。这次的dp[i][j]中i和j分别表示text1和text2,是一个比较新的思路,两个数组的状态用二维数组的行和列表示。

2024-02-27 19:46:41 851

原创 【Day56】代码随想录之动规字符串子序列_300最长递增子序列_674最长连续递增序列_718最长重复子数组

做这道题的时候我用股票买卖的思路来解,序列的每个节点有 添加子序列长度dp[i][0]、添加子序列的末尾值dp[i][1]、不添加子序列长度dp[i][2]、不添加子序列的末尾值dp[i][3] 四个状态。,我这个整数nums[i]能不能和之前的dp[j]组成子序列,不断更新nums[i]加入以后子序列的长度dp[i],每一个dp[i]代表的是不同的子序列的长度,从中遍历出最大的即可。分析原因:是因为在2的时候前面已经有子序列3,5,6长度为3会把2过滤到,但是结果是 2,4,5,6,7,12。

2024-02-23 19:33:44 809

原创 【Day55】代码随想录之动态规划_买卖股票含冷冻期和手续费

加入冷冻期的概念,如果当前卖出了会有一天的冷冻期,这一天不能买入股票,所以节点的状态增加为 持有 当场卖出 冷冻期 和 卖出状态 四种。卖出状态是说明可以持有股票了。手续费什么是否付呢?需要卖出的时候就要付了。每个节点的状态有两个,持有和不持有手里的钱。

2024-02-22 23:05:02 389

原创 【Day53】代码随想录之动态规划_买卖股票ⅠⅡ

买卖次数是不限的,之前有用贪心做过,这次用动态规划。

2024-02-22 23:03:40 290

原创 【Day52】代码随想录之动态规划_打家劫舍

房屋之间成环了,相邻两间房子都偷会使警报器响,所以首偷了尾就绝不能偷,首不偷尾可以偷。回顾打家劫舍Ⅰ,dp[i]的含义是考虑[0, i]房子可以偷窃的最大金额,dp[i] = max(dp[i-1], dp[i-2]+nums[i]),根据递推公式,在决定第i间房子可以偷窃的最大金额是受到i-1和i-2的影响的,再往前推i-1受到i-2和i-3的影响,递推下去dp[i]是受到[0-i-1]之前的房子的影响,有可能这些房子会偷,有可能不偷,但是是影响dp[i]的数值的。

2024-02-22 11:25:01 919

原创 【Day51】代码随想录之动态规划完全背包_139.单词拆分_背包总结

滚动数组的背包和物品的遍历顺序任意,内层循环体必须从小到大,有累加效果。滚动数组:必须先物品再背包,背包的遍历顺序为倒序。在物品的数量只有一个还是无数个上面。二维数组:f背包,物品遍历顺序任意。每个物品的数量只有一个。每个物品的数量有无数个。

2024-02-20 11:31:29 508

原创 【Day50】代码随想录之动态规划完全背包_70. 爬楼梯进阶_322. 零钱兑换 _279.完全平方数

初始化需要注意dp[0]是0,其余的为了不影响之后的取最小值,定义为32位数的最大值INT_MAX。dp公式:dp[j] = min(dp[j], dp[j-coins[i]]+1)。因为题目求的是最少的硬币个数,所以排列组合都可以,即物品和背包的遍历顺序均可。dp公式改变:dp[j] = min(dp[j], dp[j-i*i]+1);根据题目描述是完全背包的排列问题,遍历顺序为先背包再物品。

2024-02-18 15:35:18 276

原创 【Day44】代码随想录之动态规划完全背包_518. 零钱兑换 II_377. 组合总和 Ⅳ

由377.组合总和Ⅳ可知本题属于动态规划的完全背包的求解排列个数,for循环需要先背包再物品。

2024-02-18 13:01:30 272

原创 【Day43】代码随想录之动态规划0-1背包_1049. 最后一块石头的重量 II_494. 目标和_ 474.一和零

代码随想录有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。

2024-02-17 17:35:04 998

原创 【Day42】代码随想录之动态规划0-1背包_416. 分割等和子集

给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200。

2024-02-16 18:04:11 2090

原创 【Day40】代码随想录之动态规划_343. 整数拆分_96.不同的二叉搜索树

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。

2024-02-05 16:28:26 454

原创 【Day39】代码随想录之动态规划_62.不同路径_63. 不同路径 II

根据题目, 类比爬楼梯,由于在一点开始只能向下或者向右移动一步,所以到达某一点的方法个数等于从上面到达+从左边到达的方法数之和。初始化:dp的第一行和第一列都只能从起点一直向右或者从起点一直向下,所以dp[0][i] = 0;思路很简单,在 62.不同路径 的基础上增加了障碍,如果有障碍说明 dp[i][j] = 0。在写代码上有一些的技巧。递推公式:dp[i][j] = dp[i-1][j]+dp[i][j-1]。dp[i]含义:从[0][0] 到达 [i][j] 的方法个数。

2024-02-03 18:07:13 965

原创 【Day38】代码随想录之动态规划_理论基础_509. 斐波那契数_70. 爬楼梯_746. 使用最小花费爬楼梯

斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你n ,请计算 F(n)。这是 从前到后 动态变化 的,前面的推到出来后面,需要动规处理。给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

2024-02-02 15:57:24 548

原创 【Day37】代码随想录之贪心_738.单调递增的数字_968.监控二叉树

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x

2024-02-01 17:51:20 235

原创 【Day36】代码随想录之贪心_435. 无重叠区间 _763.划分字母区间 _56. 合并区间

在更新右边界的时候,如果遇到 上一个的右边界 大于 下一个的左边界,说明有重叠,需要更新右边界。忽略了vector<int>按照左边界排序,结果左边是从小到大,不会重叠的,遇到重叠处,两个的左边界与前面都不重叠,最后留下哪一个,取决于哪一个的右边界更小,与后面重叠的概率就越小。直接想法是统计每个位置的字母最后出现的位置,在这个区间内如果有更大的位置,字符串的长度就要往后增加,终止条件是到达这个区间内字母最后出现位置的最大值。给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。

2024-01-31 16:11:33 778

原创 【Day36】代码随想录之贪心_柠檬水找零_根据身高重建队列_用最小数量的箭引爆气球

【代码】Day35贪心_柠檬水找零_根据身高重建队列_用最小数量的箭引爆气球。

2024-01-30 18:38:55 333

原创 Day34贪心_k次取反数组和最大_加油站_分发糖果

第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完。第二步:从 后向前 遍历,遇到负数将其变为正数,同时K–第一步:将数组按照绝对值大小 从小到大 排序,

2024-01-30 16:36:46 268

原创 Day32贪心_买卖股票的最佳时机_跳跃游戏Ⅰ、Ⅱ

【代码】Day32贪心_买卖股票的最佳时机_跳跃游戏Ⅰ、Ⅱ。

2024-01-30 10:46:52 319

原创 Day31_贪心_分发饼干_摆动序列_最大子数组的和

455 分发饼干首先的两个数组排序形成对应关系。使用index避免了 两重for 的使用。376 摆动序列记录前一个 峰差 和后一个 峰差。两个异号,result++。刚开始的 前峰 置为0, 使得从第二个数字开始就可以统一判断的逻辑。为了使 摆动序列的长度 最长,遇到恒正取最大,恒负取最小。代码使用 curDiff = nums[i] - nums[i-1]; 实现,因为恒正的最大就是最后一个。同负。很妙的点。53最大子数组和我的想法是子数组首位不为 负数。贪心思路则部分和不为负

2024-01-27 15:35:29 220

原创 day30_回溯总结_行程安排_N皇后

以下内容来自于代码随想录]

2024-01-26 15:37:36 307

原创 Day29_回溯_491非递增序列_46全排列_47全排列Ⅱ

【代码】Day29_回溯_491非递增序列_46全排列_47全排列Ⅱ。

2024-01-25 16:26:15 356

原创 !!Day28_93复原IP地址_78子集_90子集Ⅱ

【代码】!!Day28_93复原IP地址_78子集_90子集Ⅱ。

2024-01-25 14:20:42 367

原创 Day27_39组合总和_40组合总和Ⅱ_131回文串的切割

5. 参数与返回值:字符串s和在s中开始的位置startIndex。6. 终止条件:切割的切割线到了最后一个字符的后面:aab|。startIndex与i的比较。切割问题转为组合问题。

2024-01-24 19:00:07 842

原创 Day24_216组合总数_17电话号码的字母组合

【代码】Day24_216组合总数_17电话号码的字母组合。

2024-01-24 12:00:58 382

原创 Day24_77 组合

【代码】Day24_77 组合。

2024-01-24 10:24:51 377

原创 day23_二叉搜索树_669修剪low和high_108有序数组转二叉搜索树_538把二叉搜索树转为叠加树

文章目录[669 修剪二叉搜索树](https://programmercarl.com/0669.%E4%BF%AE%E5%89%AA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html)[108 将有序数组转为二叉搜索树](https://programmercarl.com/0108.%E5%B0%86%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E8%BD%AC%E6%8D%A2%E4%B8%BA%E4%BA%8C%E5%8

2024-01-20 17:11:02 348

原创 day22_236二叉树最近公共祖先_235二叉搜索树(最近公共祖先_701插入一个节点_450删除一个节点)

【代码】day22_236二叉树最近公共祖先_235二叉搜索树(最近公共祖先_701插入一个节点_450删除一个节点)

2024-01-20 11:34:35 362

原创 !!Day21_530二叉树的最小的差的绝对值_501二叉搜索树的众数

很简单的逻辑,但是却实现的不好。

2024-01-18 18:19:50 316

原创 day20_654最大二叉树_617合并_700在搜索树中搜索_98验证二叉搜索树

【代码】day20_654最大二叉树_617合并_700在搜索树中搜索_98验证二叉搜索树。

2024-01-18 17:16:31 317

原创 day18 513左下角的值_112路径总和_106中序和后序_105中序和前序

【代码】day18 513左下角的值_112路径总和_106中序和后序_105中序和前序。

2024-01-17 15:57:00 345

原创 day17 110平衡二叉树_257所有路径之和_404左叶子之和

110 平衡二叉树平衡二叉树的含义:树的左子树和右子树的高度相差不大于1。求左子树和右子树的高度,采用的是后序遍历。257 所有路径之和求的的路径的结束条件是遇到叶子节点(左孩子和有孩子都为空)。DFS,可以用前序遍历,在节点处理处出了叶子节点都在字符串插入数字和“->”,在叶子处只插入字符。int转字符串:string str = std::to_string(int val)。字符串转int:int val = std::stoi(string str);(C++11才有的)。

2024-01-17 11:17:12 321

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除