
动态规划
文章平均质量分 87
lenyan~
大家好,我是 lenyan。在这里,你将开启一场精彩绝伦的 Java 知识奇妙之旅。
努力学习,争取实习,希望可以和大家多多交流。
GitHub: https://github.com/lenyanjgk
展开
-
蓝桥杯 第2945题 课程抢购 C++ Java Python
lenyan算法笔记》个人笔记日常更新。含金量不高。/(ㄒoㄒ)/~~原创 2024-03-30 19:00:00 · 1086 阅读 · 2 评论 -
力扣LCR 100题 三角形最小路径和 C++ 动态规划 附Java代码
中等相关标签给定一个三角形triangle,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。在这里指的是与相同或者等于的两个结点。也就是说,如果正位于当前行的下标i,那么下一步可以移动到下一行的下标i或i + 1。11如下面简图所示:46748 3自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。原创 2023-11-27 08:00:00 · 287 阅读 · 0 评论 -
力扣第42题 接雨水 C++ 动态规划 + 单调栈 + 双指针 Java总代码 都有
困难相关标签给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。6上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。9。原创 2023-11-15 09:00:00 · 410 阅读 · 0 评论 -
力扣第516题 最长回文子序列 c++ 动态规划 附Java代码 注释版
相关标签给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。4一个可能的最长回文子序列为 "bbbb"。s = "cbbd"2一个可能的最长回文子序列为 "bb"。原创 2023-11-13 09:00:00 · 344 阅读 · 0 评论 -
力扣第647题 回文子串 c++ 动态规划 双指针 附Java代码 注释解释版
中等相关标签给你一个字符串s,请你统计并返回这个字符串中的数目。是正着读和倒过来读一样的字符串。是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。s = "abc"3三个回文子串: "a", "b", "c"s = "aaa"66个回文子串: "a", "a", "a", "aa", "aa", "aaa"原创 2023-11-13 08:00:00 · 193 阅读 · 0 评论 -
力扣第72题 编辑距离 (增 删 改) C++ 动态规划 附Java代码
中等相关标签给你两个单词word1和word2请返回将word1转换成word2所使用的最少操作数。3horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')5intention -> inention (删除 't')inention -> enention (将 'i' 替换为 'e')enention -> exention (将 'n' 替换为 'x')原创 2023-11-12 08:00:00 · 516 阅读 · 0 评论 -
力扣第583题 两个字符串的删除操作 c++ 动态规划 附Java代码
中等相关标签给定两个单词word1和word2,返回使得word1和word2所需的。可以删除任意一个字符串中的一个字符。2第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea"4word2。原创 2023-11-11 09:00:00 · 258 阅读 · 0 评论 -
力扣第115题 不同的子序列 c++ 动态规划 注释版 + Java代码
相关标签给你两个字符串s和t,统计并返回在s的中t出现的个数,结果需要对 109 + 7 取模。输出 : 3如下所示, 有 3 种可以从 s 中得到 "rabbit" 的方案。输出 : 5如下所示, 有 5 种可以从 s 中得到 "bag" 的方案。t。原创 2023-11-11 08:00:00 · 95 阅读 · 0 评论 -
力扣第392题 判断子序列 c++ 双指针 动态规划 + 其他解法 附Java代码
简单相关标签给定字符串和,判断是否为的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?添加此问题并且创建所有测试用例。truefalse。原创 2023-11-10 10:00:00 · 176 阅读 · 0 评论 -
力扣第53题 最大子数组和 C++ 动态规划 / 贪心算法 附Java代码
中等相关标签给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。nums = [1]123如果你已经实现复杂度为O(n)的解法,尝试使用更为精妙的求解。原创 2023-11-10 08:00:00 · 212 阅读 · 0 评论 -
力扣第1035题 不相交的线中等 c++ (最长公共子序列) 动态规划 附Java代码
中等相关标签在两条独立的水平线上按给定的顺序写下nums1和nums2中的整数。现在,可以绘制一些连接两个数字nums1[i]和nums2[j]请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。2可以画出两条不交叉的线,如上图所示。但无法画出第三条不相交的直线,因为从 nums1[1]=4 到 nums2[2]=4 的直线将与从 nums1[2]=2 到 nums2[1]=2 的直线相交。32。原创 2023-11-10 09:00:00 · 315 阅读 · 0 评论 -
力扣第1143题 最长公共子序列 c++ 动态规划 附Java代码 注释版
相关标签给定两个字符串text1和text2,返回这两个字符串的最长的长度。如果不存在,返回0。一个字符串的是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。"ace""abcde""aec""abcde"两个字符串的是这两个字符串所共同拥有的子序列。3最长公共子序列是 "ace" ,它的长度为 3。3最长公共子序列是 "abc" ,它的长度为 3。0两个字符串没有公共子序列,返回 0。text2。原创 2023-11-09 10:00:00 · 255 阅读 · 0 评论 -
力扣第718题 最长重复子数组 c++ 动态规划 + 滚动数组优化 附Java代码
中等相关标签给两个整数数组nums1和nums2,返回两个数组中、长度最长的子数组的长度。3长度最长的公共子数组是 [3,2,1]。5。原创 2023-11-09 09:00:00 · 246 阅读 · 0 评论 -
力扣第674题 最长连续递增序列 C++ 动态规划 + 贪心 附Java代码
简单相关标签给定一个未经排序的整数数组,找到最长且,并返回该序列的长度。可以由两个下标l和rl < r)确定,如果对于每个l <= i < r,都有,那么子序列就是连续递增子序列。3最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。1最长连续递增序列是 [2], 长度为1。原创 2023-11-09 08:00:00 · 81 阅读 · 0 评论 -
力扣第300题 最长递增子序列 c++ 动态规划题 附Java代码
中等相关标签给你一个整数数组nums,找到其中最长严格递增子序列的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组的子序列。4最长递增子序列是 [2,3,7,101],因此长度为 4。41。原创 2023-11-08 09:00:00 · 277 阅读 · 0 评论 -
力扣第714题 买卖股票的最佳时机含手续费 c++ 动态规划 附Java代码
相关标签给定一个整数数组prices,其中prices[i]表示第i天的股票价格;整数fee代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。8能够达到的最大利润:在此处买入 prices[0] = 1在此处卖出 prices[3] = 8在此处买入 prices[4] = 4。原创 2023-11-08 08:00:00 · 237 阅读 · 0 评论 -
力扣第309题 买卖股票的最佳时机含冷冻期 c++ 动态规划 附Java代码
中等相关标签给定一个整数数组prices,其中第prices[i]表示第i天的股票价格。设计一个算法计算出最大利润。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。3对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]0。原创 2023-11-07 10:00:00 · 101 阅读 · 0 评论 -
力扣第188题 买卖股票的最佳时机 IV c++ 动态规划题 附Java代码
困难相关标签给你一个整数数组prices和一个整数k,其中prices[i]是某支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成k笔交易。也就是说,你最多可以买k次,卖k次。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。2在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。7。原创 2023-11-07 09:30:00 · 217 阅读 · 0 评论 -
力扣第123题 买卖股票的最佳时机 III c++ 动态规划解法 hard题 附Java代码
困难相关标签给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成交易。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。6在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3。4。原创 2023-11-07 09:00:00 · 178 阅读 · 0 评论 -
力扣第122题 买卖股票的最佳时机 Il c++ 动态规划解法 dp思维 股票问题 附Java代码
贪心解法 股票问题2相关标签给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。7在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。原创 2023-11-07 08:30:00 · 156 阅读 · 0 评论 -
力扣第121题 买卖股票的最佳时机 c++ 动态规划解法 熟练dp思维 之简单题 附Java代码
贪心解法 股票问题相关标签给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择买入这只股票,并选择在卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。5在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。0。原创 2023-11-07 08:00:00 · 921 阅读 · 2 评论 -
力扣第337题 打家劫舍 IIl c++ 附Java代码 暴力+记忆递推 或or 动态规划
相关标签小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为root。除了root之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。如果,房屋将自动报警。给定二叉树的root。返回,小偷能够盗取的最高金额。7小偷一晚能够盗取的最高金额 3 + 3 + 1 = 79小偷一晚能够盗取的最高金额 4 + 5 = 9[1, 104]原创 2023-11-06 09:00:00 · 212 阅读 · 0 评论 -
力扣第213题 打家劫舍|| c++ 附Java代码 将回环转线性 动态规划
相关标签你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,今晚能够偷窃到的最高金额。3你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。4你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。3。原创 2023-11-06 08:30:00 · 204 阅读 · 0 评论 -
力扣第198题 打家劫舍 c++ 附Java代码 动态规划
相关标签你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。[1,2,3,1]4偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。12偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。原创 2023-11-06 08:00:00 · 92 阅读 · 0 评论 -
力扣第139题 单词拆分 c++ 附java代码 动态规划题型
时间复杂度为O(n^2),其中n为字符串s的长度。这是因为我们需要遍历字符串s的每个位置,对于每个位置i,又需要从0到i-1的位置进行遍历,因此总的时间复杂度为O(n^2)。空间复杂度为O(n),其中n为字符串s的长度。这是因为我们使用了一个大小为n+1的dp数组来保存中间结果,以及一个unordered_set来存储wordDict中的单词。因此,总的空间复杂度为O(n)。相关标签给你一个字符串s和一个字符串列表wordDict作为字典。请你判断是否可以利用字典中出现的单词拼接出s。原创 2023-11-05 09:00:00 · 271 阅读 · 0 评论 -
力扣第279题 完全平方数 c++ 附java代码 (完全背包)动态规划问题
相关标签给你一个整数n,返回和为n的完全平方数的最少数量。是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,149和16都是完全平方数,而3和11不是。原创 2023-11-05 08:00:00 · 458 阅读 · 0 评论 -
力扣第322题 零钱兑换 c++ java 动态规划
这个问题的目标是计算凑出目标金额所需的最少硬币数量。原创 2023-11-04 12:00:00 · 568 阅读 · 0 评论 -
力扣第377题 组合总和 IV c++附java代码 动态规划 完全背包
首先,我们需要明确问题的目标是计算组成目标和的方法数。在这里,目标和指的是我们要用给定的一组硬币面额组合出的一个特定的金额。原创 2023-11-04 09:00:00 · 103 阅读 · 0 评论 -
力扣第518题 零钱兑换II c++附java代码+打印dp代码 完全背包题型
相关标签给你一个整数数组coins表示不同面额的硬币,另给一个整数amount表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回0。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。4有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+10只用面额 2 的硬币不能凑成总金额 3。1。原创 2023-11-04 08:00:00 · 240 阅读 · 0 评论 -
力扣第474题 一和零 c++ 动态规划 01背包
相关标签给你一个二进制字符串数组strs和两个整数m和n。请你找出并返回strs的最大子集的长度,该子集中有m个0和n个1。如果x的所有元素也是y的元素,集合x是集合y的。4最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4。其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"}。{"111001"} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3。2。原创 2023-11-03 09:00:00 · 254 阅读 · 1 评论 -
力扣第494题 目标和 c++ 动态规划 c++ 01背包 难~~
中等相关标签给你一个非负整数数组nums和一个整数target。向数组中的每个整数前添加'+'或'-',然后串联起所有整数,可以构造一个2'+'1'-'"+2-1"返回可以通过上述方法构造的、运算结果等于target的不同的数目。5一共有 5 种方法让最终目标和为 3。1。原创 2023-11-03 07:00:00 · 347 阅读 · 0 评论 -
力扣第1049题 最后一块石头的重量Il c++ 动态规划(01背包)
相关标签有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出,然后将它们一起粉碎。假设石头的重量分别为x和y,且x <= y。x == yx!= yxyy-x最后,石头。返回此石头。如果没有石头剩下,就返回0。1组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],组合 2 和 1,得到 1,所以数组转化为 [1,1,1],原创 2023-11-03 08:00:00 · 303 阅读 · 0 评论 -
力扣第416题 *** 分割等和子集 c++ 新题 动态规划 中的 01背包问题
相关标签给你一个的数组nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。true数组可以分割成 [1, 5, 5] 和 [11]。false数组不能分割成两个元素和相等的子集。原创 2023-11-02 09:00:00 · 148 阅读 · 0 评论 -
力扣第96题 不同的二叉搜索树 c++ 二叉搜索树 动态规划 + 数学思维
相关标签给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的有多少种?返回满足题意的二叉搜索树的种数。原创 2023-11-02 08:00:00 · 254 阅读 · 0 评论 -
力扣第343题 整数拆分 c++ 动态规划 + 贪心巧解
相关标签给定一个正整数n,将其拆分为k个的和(k >= 2),并使这些整数的乘积最大化。返回你可以获得的最大乘积。原创 2023-11-01 09:30:00 · 256 阅读 · 0 评论 -
力扣第63题 不同路径 || c++ 动态规划 + 优化代码
相关标签一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用1和0来表示。23x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同的路径:1. 向右 -> 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右 -> 向右101。原创 2023-11-01 09:15:00 · 200 阅读 · 0 评论 -
力扣第62题 不同路径 c++ 动态规划 dp二维 + dp一维 解法
中等相关标签一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?283从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右3. 向下 -> 向右 -> 向下2862 * 109。原创 2023-11-01 09:00:00 · 253 阅读 · 0 评论 -
力扣第746题 使用最小花费爬楼梯 c++ 动态规划
相关标签给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为0或下标为1的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。,20]15你将从下标为 1 的台阶开始。- 支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15。cost = [,100,,1,,100,,100,6你将从下标为 0 的台阶开始。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。原创 2023-11-01 08:00:00 · 383 阅读 · 0 评论 -
力扣第70题 爬楼梯 c++ 动态规划 基础题
简单相关标签假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?n = 22有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶n = 33有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶。原创 2023-10-31 10:00:00 · 286 阅读 · 0 评论 -
力扣第509题 斐波那契数 新手动态规划(推荐参考) c++
相关标签(通常用F(n)表示)形成的序列称为。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(n) = F(n - 1) + F(n - 2),其中 n > 1给定n,请计算F(n)。原创 2023-10-31 08:00:00 · 427 阅读 · 0 评论