代码随想录随手刷
文章平均质量分 56
两个月一定要怒刷150道算法题
麻摆子
50岁大叔,退休之后学点新技术
展开
-
动态规划区间dp之516最长回文子序列
(2)如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。其他情况dp[i][j]初始为0就行,这样递推公式:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);那么dp[i][j]一定是取最大的,即:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);加入s[j]的回文子序列长度为dp[i + 1][j]。原创 2023-09-06 14:12:09 · 149 阅读 · 0 评论 -
动态规划区间dp之647回文子串
如果这矩阵是从上到下,从左到右遍历,那么会用到没有计算过的dp[i + 1][j - 1],也就是根据不确定是不是回文的区间[i+1,j-1],来判断了[i,j]是不是回文,那结果一定是不对的。布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。首先从递推公式中可以看出,情况三是根据dp[i + 1][j - 1]是否为true,在对dp[i][j]进行赋值true的。所以dp[i][j]初始化为false。原创 2023-09-06 11:06:39 · 164 阅读 · 0 评论 -
动态规划完全背包之518零钱兑换 II
这个递推公式和494目标和是一样的,即求装满背包有几种方法,公式都是:dp[j] += dp[j - nums[i]];给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。(1)先遍历物品,再遍历背包容量:是求组合数,也就是物品的前后顺序不重要。我们知道01背包内嵌的循环是从大到小遍历,为了保证每个物品仅被添加一次。(2)先遍历背包容量,再遍历物品:是求排列数,也就是物品的前后顺序重要。假设每一种面额的硬币有无限个。原创 2023-07-16 20:48:18 · 285 阅读 · 0 评论 -
动态规划01背包之494目标和
例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1"。当背包里已经有一个1(nums[i]) 的话,有 dp[3]种方法 凑成 容量为4的背包。当背包里已经有一个2(nums[i]) 的话,有 dp[2]种方法 凑成 容量为4的背包。当背包里已经有一个3(nums[i]) 的话,有 dp[1]种方法 凑成 容量为4的背包。当背包里已经有一个4(nums[i]) 的话,有 dp[0]种方法 凑成 容量为4的背包。原创 2023-07-14 22:37:07 · 134 阅读 · 0 评论 -
动态规划01背包之1049 最后一块石头的重量 II
本题中,石头的重量是 stones[i],石头的价值也是 stones[i] ,可以 “ 最多可以装的价值为 dp[j] ” == “ 最多可以背的重量为dp[j] ”01背包的递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);01背包中,dp[j]:容量为j的背包,最多可以装的价值为 dp[j]。本题物品的重量为stones[i],物品的价值也为stones[i]。,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为。原创 2023-07-14 20:45:11 · 221 阅读 · 0 评论 -
动态规划01背包之416分割等和子集
由dp[i - 1][j - weight[i]]推出,dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值,那么dp[i - 1][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最大价值。:由dp[i - 1][j]推出,即背包容量为j,里面不放物品i的最大价值,此时dp[i][j]就是dp[i - 1][j]。(2)背包要放入的商品(集合里的元素)体积为 元素的数值,价值也为元素的数值。原创 2023-07-14 20:00:54 · 234 阅读 · 0 评论 -
动态规划之96不同的二叉搜索树
dp[3],就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。当1为头结点的时候,其右子树有两个节点,看这两个节点的布局,和 n 为2的时候两棵树的布局是一样的。元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量。元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量。元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量。原创 2023-07-08 20:29:10 · 299 阅读 · 0 评论 -
动态规划之343整数拆分
其实可以从1开始遍历 j ,然后有两种渠道得到dp[i].是单纯的把整数拆分为两个数相乘,而。是拆分成两个以及两个以上的个数相乘。,相当于是拆分 (i - j)。),并使这些整数的乘积最大化。直接相乘,相当于拆分 i。你可以获得的最大乘积。原创 2023-07-08 19:04:30 · 345 阅读 · 0 评论 -
动态规划之119杨辉三角 II
它是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。即第 n 行的第 i 个数等于第 n−1 行的第 i−1 个数和第 i 个数之和。(3)第 n 行的第 m 个数(从 0 开始编号)表示组合数 C(n,m),记作。(2)第 n 行(从 0 开始编号)的数字有 n+1 项,前 n 行共有。的展开式(二项式展开)中的各项系数依次对应杨辉三角的第 n 行中的每一项。在「杨辉三角」中,每个数是它左上方和右上方的数的和。原创 2023-07-15 21:42:17 · 280 阅读 · 0 评论 -
动态规划之118杨辉三角
在「杨辉三角」中,每个数是它左上方和右上方的数的和。原创 2023-07-15 19:21:10 · 145 阅读 · 0 评论 -
动态规划之63不同路径 II
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。原创 2023-07-07 21:29:29 · 302 阅读 · 0 评论 -
动态规划之62不同路径
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。问总共有多少条不同的路径?原创 2023-07-07 20:58:32 · 252 阅读 · 0 评论 -
动态规划之746使用最小花费爬楼梯
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。原创 2023-07-07 20:26:19 · 186 阅读 · 0 评论 -
动态规划之70爬楼梯
你有多少种不同的方法可以爬到楼顶呢?空间复杂度:O(n);时间复杂度:O(n)原创 2023-07-07 19:47:41 · 276 阅读 · 0 评论 -
动态规划之509斐波那契数
表示)形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。斐波那契数 (通常用。原创 2023-07-06 18:38:07 · 121 阅读 · 0 评论