动态规划
文章平均质量分 79
Yuan_Source
本人资历尚浅,如果文中有任何问题,劳请指出。
展开
-
动态规划-不同的子序列
题目描述给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 + 7 取模。示例:输入:s = "babgbag", t = "bag"输出:5解释:如下所示, 有 5 种可以从 s 中得到 "bag" 的方案。babgbagbabgbagbabgbagbabgbagbabgbag为了解决这个问题,我们首先需要理解题目中的关键概念:“子序列”和“出现的个数”。原创 2024-09-14 20:36:32 · 193 阅读 · 0 评论 -
动态规划-最长公共子序列
此后我们还会介绍一些如本题这样有两个字符串的问题。原创 2024-09-14 20:35:47 · 375 阅读 · 0 评论 -
动态规划-分割回文串Ⅱ&Ⅳ
在本篇博客中将介绍分割回文串Ⅱ以及分割回文串Ⅳ这两个题目。原创 2024-09-10 21:17:38 · 693 阅读 · 1 评论 -
动态规划-最长回文子序列
如果。原创 2024-09-10 21:16:56 · 734 阅读 · 0 评论 -
动态规划-最长回文子串
首先,我们需要定义DP数组dp,其中dp[i][j]表示字符串s中从索引i到索引j的子串(即s[i--j])是否是回文子串。注意,这里i和j都是基于0的索引。原创 2024-09-08 16:11:57 · 593 阅读 · 0 评论 -
动态规划-回文子串
dp[i][j]:如果s从i到j的子串 是回文子串,则dp[i][j]为true,否则为false。原创 2024-09-08 15:56:30 · 491 阅读 · 0 评论 -
动态规划-最长定差子序列
给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference。是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从 arr 派生出来的序列。示例 :输入:arr = [1,5,7,8,5,3,4,2,1,0], difference = -2输出:4解释:最长的等差子序列是 [7,5,3,1]。原创 2024-09-06 15:13:22 · 682 阅读 · 0 评论 -
动态规划-乘积为正数的最长子数组长度
首先,我们需要定义状态来表示问题的子问题。在这个问题中,我们关心的是以某个元素结尾的子数组的最长乘积为正数的长度。但是,由于乘积可能涉及正负数的相乘,我们还需要额外跟踪以某个元素结尾的子数组的最长乘积为负数的长度。pos[i]:以nums[i]结尾的最长乘积为正数的子数组的长度。neg[i]:以nums[i]结尾的最长乘积为负数的子数组的长度。注意,我们并不直接定义一个状态来表示“最长乘积为正数的子数组的长度”,因为那样会很难处理跨越多个元素的乘积变化(特别是涉及到负数时)。原创 2024-09-05 13:54:04 · 437 阅读 · 0 评论 -
动态规划-乘积最大子数组
与最大乘积类似,最小乘积的更新也考虑了当前元素、前一个位置的最小乘积乘以当前元素,以及前一个位置的最大乘积乘以当前元素(当当前元素为负数时)。这是因为,负数乘以正数(前一个位置的最大乘积)会得到一个更小的负数,这可能是新的最小乘积。给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续 子数组 (该子数组中至少包含一个数字),并返回该子数组所对应的乘积。本身(如果前面的元素都是负数或者乘积小于当前元素),要么是前面位置的最大乘积。数组中的最大值即为所求的最大乘积子数组的乘积。原创 2024-09-03 16:32:47 · 369 阅读 · 1 评论 -
动态规划-最大子数组和
我们定义一个数组dp,其中dp[i]表示以nums[i]结尾的连续子数组的最大和。注意,这里的定义稍微有些不同,因为我们实际上并不需要显式地存储整个dp数组(尽管在某些情况下这样做可以方便调试和理解),而是可以通过变量来维护当前的最大和(即dp数组中的最后一个有效值)以及全局的最大和。原创 2024-09-03 16:32:08 · 783 阅读 · 0 评论 -
动态规划-买卖股票的最佳时机Ⅳ
在这个解决方案中,我们使用了两个二维数组f和g来跟踪每一天和每一次交易后的最大利润。f[i][j]:表示第i天结束后,进行了j次交易(注意这里的j次交易包括买入和卖出),并且当前手中持有股票时的最大利润。g[i][j]:表示第i天结束后,进行了j次交易,并且当前手中没有股票时的最大利润。原创 2024-08-31 23:01:45 · 936 阅读 · 0 评论 -
动态规划-买卖股票的最佳时机含冷冻期
本篇包括买卖股票的最佳时机含手续费以及买卖股票的最佳时机含冷冻期两题。此前也讲解过买卖股票的最佳时机系列的其他问题,可以阅读贪心算法_Yuan_Source的博客-CSDN博客。原创 2024-08-28 14:09:14 · 832 阅读 · 0 评论 -
动态规划-删除并获取点数
接下来,定义一个长度为n+1的数组dp,其中dp[i]表示在考虑前i个数字(即数字1到i)时,通过删除操作可以获得的最大点数。注意这里的“前i个数字”是指arr数组中索引为0到i的元素,它们实际上对应了原数组nums中的数字1到i(如果它们存在的话)。原创 2024-08-26 10:00:10 · 305 阅读 · 0 评论 -
动态规划-粉刷房子
动态规划(Dynamic Programming, DP)是一种通过将原问题分解为相对简单的子问题的方式求解复杂问题的方法。这些子问题通常是原问题的较小实例,并且它们的解被保存起来以便后续使用,从而避免了重复计算。当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的正整数矩阵 costs 来表示的。假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其。原创 2024-08-26 08:55:20 · 524 阅读 · 0 评论 -
动态规划-打家劫舍Ⅱ
该题是打家劫舍Ⅰ的升级版并与其相关,如果对其感兴趣的话可以先看看打家劫舍Ⅰ。原创 2024-08-24 10:24:58 · 540 阅读 · 1 评论 -
动态规划-打家劫舍
dp[i]:到位置i时(包括位置i),可以抢到的最多钱。这个数组在最终答案的求解中并不是直接必要的,因为最终答案可以通过遍历f或g数组得到,但在这里它被用作一个中间变量来存储每个位置的最大收益。f[i]:在位置i选择抢时,到位置i可以抢到的最多钱。这表示如果小偷决定抢第i个房子,那么他应该抢到的最大金额。g[i]:在位置i不抢时,到位置i可以抢到的最多钱。这表示如果小偷决定不抢第i个房子,那么他应该抢到的最大金额。原创 2024-08-24 09:03:04 · 1147 阅读 · 0 评论 -
动态规划-地下城游戏
在上一篇博客中,我们了解两个关于路径的问题,在这一篇中,我们将进一步了解一道更加困难的问题。原创 2024-08-22 15:59:55 · 1103 阅读 · 0 评论 -
动态规划-路径问题(最小路径和+珠宝的最高价值)
然而,需要注意的是,这些额外的行和列通常被初始化为一个足够大的值以确保它们不会被选择为到达网格中某个点的最优路径的一部分。这个题目是一个典型的动态规划(Dynamic Programming, DP)问题,它涉及到在给定网格中寻找一条从左上角到右下角的路径,使得路径上经过的数字总和最小。给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小,每次只能向下或者向右移动一步。:在DP表的第一行和第一列(实际上是索引为0的行和列)上,除了左上角的。原创 2024-08-22 15:32:59 · 608 阅读 · 0 评论 -
动态规划-下降路径最小和
下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置(row, col)的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (row + 1, col + 1)。动态规划通常用于解决那些可以通过将原问题分解为较小子问题,然后解决这些子问题来解决整个问题的情况。在这个问题中,我们可以从最后一行开始向上回溯,计算到达每一行每一列的最小路径和。原创 2024-08-20 17:28:37 · 423 阅读 · 0 评论 -
动态规划-91.解码方法
例如,"11106" 可以映射为: "AAJF" ,将消息分组为 (1, 1, 10, 6) "KJF" ,将消息分组为 (11, 10, 6) 消息不能分组为 (1, 11, 06) ,因为 "06" 不是一个合法编码(只有 "6" 是合法的)。给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数。如果没有合法的方式解码整个字符串,返回 0。然而,在 解码 已编码的消息时,你意识到有许多不同的方式来解码,因为有些编码被包含在其它编码当中("2" 和 "5" 与 "25")。原创 2024-08-18 15:40:25 · 359 阅读 · 0 评论 -
动态规划-斐波那契数列
动态规划是一种强大的算法设计技术,特别适用于那些具有重叠子问题和最优子结构特征的问题。通过合理定义状态、建立状态转移方程、初始化边界条件以及确定计算顺序,可以有效地解决复杂的最优化问题。原创 2024-08-10 19:33:56 · 640 阅读 · 1 评论