
算法
文章平均质量分 93
阿杰来学编程
Hello,world!
展开
-
动态规划——简单多状态 dp 问题
如果将负无穷设置为int类型的最小值时,g[i-1][j]-price[i]会超出int类型的范围,从而变成一个很大的一个值,即溢出,因此我们可以规定无穷大为0x3f3f3f3f,正好是int类型最大值的一半,足够小即可。对于[2,4,5,6,1]这种不连续或乱序的序列,就不能直接去用打家劫舍去做了,我们可以去创建一个数组[0,1,2,0,4,5,6],使其。返回值:g[n-1][0],g[n-1][1],g[n-1][2]三者的最大值。对于[1,2,3,4,5,6]这种连续且数字唯一的序列,原创 2025-01-20 23:54:25 · 1111 阅读 · 0 评论 -
深度优先遍历(DFS)
深度优先遍历(,全称为),是我们树或者图这样的数据结构中常⽤的⼀种。这个算法会尽可能深的搜索树或者图的分⽀,直到⼀条路径上的所有节点都被遍历完毕,然后再回溯到上⼀层,继续找⼀条路遍历。以及。因为树的定义本⾝就是递归定义,因此采⽤递归的⽅法去实现树的三种遍历不仅容易理解⽽且代码很简洁。并且前中后序三种遍历的唯⼀区别就是,在做题的时候,选择⼀个适当的遍历顺序,对于算法的理解是⾮常有帮助的。原创 2024-12-13 23:49:40 · 1411 阅读 · 0 评论 -
动态规划——路径问题
当(i,j)位置是魔法球时,可以用之前的dp[i+1][j]和dp[i][j+1]中的最小健康值减去治疗量,就能得到当前的位置到达终点位置时所需的最小健康值dp[i][j](注意:dp[i][j]不能小于0,最小值为1);由此可知,到达魔法球位置所需的最低初始健康值和上一次的最低初始健康值保持一致,而魔法球会增加健康值,这就会对后面的结果产生影响,因此我们不仅要考虑到达(i,j)位置的最小初始健康值,还需要考虑到达(i,j)位置时的健康值,以保证后续结果的正确性。通过这种状态表示,我们最终能够求得结果!原创 2024-12-13 00:08:18 · 1087 阅读 · 0 评论 -
详解LeetCode地下城游戏(动态规划)——区分两种状态表示形式
当(i,j)位置是魔法球时,可以用之前的dp[i+1][j]和dp[i][j+1]中的最小健康值减去治疗量,就能得到当前的位置到达终点位置时所需的最小健康值dp[i][j](注意:dp[i][j]不能小于0,最小值为1);由此可知,到达魔法球位置所需的最低初始健康值和上一次的最低初始健康值保持一致,而魔法球会增加健康值,这就会对后面的结果产生影响,因此我们不仅要考虑到达(i,j)位置的最小初始健康值,还需要考虑到达(i,j)位置时的健康值,以保证后续结果的正确性。通过这种状态表示,我们最终能够求得结果!原创 2024-12-07 17:26:21 · 1005 阅读 · 0 评论 -
递归 算法
首先,解决一个递归问题的思路就是找出重复的子问题,据此可以设计出函数头;然后,只关心某一个子问题在做什么->函数体的设计;这道题在前面也同样做过,现在用递归来实现,下面用两个不同的视角来看待,本质上,两者都是一样的,只是第二种视角是第一种视角的展开。这道题在链表那一节已经写过了,现在如果用递归去实现,该怎么写呢?先当前节点后面的节点逆置,再把当前节点连接到逆置后的链表后面。换个角度,当我们求解x。因此,想要逆置这个链表,可以采用后续遍历的思想。时,我们可以先求出x。时,我们可以先求出x。原创 2024-12-04 08:57:17 · 1054 阅读 · 0 评论 -
动态规划——斐波那契数列模型
只有在i = 2时,会用到dp[0],即dp[2] += dp[0],当满足tt = 10时,即两个字符组合起来可以解码,这时dp[2]应该需要加1,所以dp[0]应该等于1。举个例子:假如s = “2103”,创建一个虚拟节点dp[0],当i = 2,字符串访问到下标为1的字符位置,即’1’的位置,这时计算以它为结尾的解码总数,‘1’不等于’0’,dp[2] += dp[1],而dp[1]等于1;写这段代码时,初始化步骤较为冗长,那有没有什么办法可以优化一下呢?原创 2024-12-02 09:58:57 · 1140 阅读 · 0 评论