
动态规划
文章平均质量分 60
1、固定状态;2、转移方程
answer_yym
且随疾风前行
展开
-
动态规划题解
找状态转移方程。原创 2024-07-05 20:32:34 · 192 阅读 · 0 评论 -
编辑距离_两个字符串a,b,把a变成b 最小操作次数
在你的代码中,你使用了变量 m 和 n 来定义数组 dp 的大小,这是不被允许的,因此编译器会报错。给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数。inention -> enention (将 ‘i’ 替换为 ‘e’)enention -> exention (将 ‘n’ 替换为 ‘x’)exention -> exection (将 ‘n’ 替换为 ‘c’)horse -> rorse (将 ‘h’ 替换为 ‘r’)原创 2024-07-09 16:29:31 · 389 阅读 · 0 评论 -
分糖果 2 (循环递增分)& 3 (根据得分 分)
然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果。第四次,ans[3] += 1(因为此时只剩下 1 颗糖果),最终数组变为 [1,2,3,1]。n 个孩子站成一排。第一次,ans[0] += 1,数组变为 [1,0,0,0]。第二次,ans[1] += 2,数组变为 [1,2,0,0]。第三次,ans[2] += 3,数组变为 [1,2,3,0]。第二次,ans[1] += 2,数组变为 [1,2,0]。原创 2024-07-09 12:40:35 · 733 阅读 · 0 评论 -
打家劫舍2(循环) & 3(树根)
动态规划,回溯递归,下边解法是结合动态规划的回溯递归,定义树节点所带的钱,用一个unordered_map把树节点和钱绑定在一起,递归看的层次就是关注在此节点上,孩子节点只要关注能带回来多少钱,而能带回来的钱,又是通过递归函数实现,防止递归出现的没必要的多次遍历,就初始化都是0,如果遍历过了,就携带此节点的钱,然后直接返回这个节点的钱就好了。解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。输入: [3,2,3,null,3,null,1]原创 2024-07-08 17:36:01 · 647 阅读 · 0 评论 -
跳跃游戏1&2
解释:无论怎样,总会到达下标为 3 的位置。解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。输入: nums = [2,3,1,1,4]输入: nums = [2,3,0,1,4]输入:nums = [2,3,1,1,4]输入:nums = [3,2,1,0,4]原创 2024-07-05 22:41:27 · 461 阅读 · 0 评论 -
按摩师_接预约(打家劫舍1)
解释: 选择 1 号预约、 3 号预约、 5 号预约和 8 号预约,总时长 = 2 + 4 + 3 + 3 = 12。dp, 找状态转移方程:dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])解释: 选择 1 号预约、 3 号预约和 5 号预约,总时长 = 2 + 9 + 1 = 12。解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。输入: [2,1,4,5,3,1,1,3]输入: [2,7,9,3,1]输入: [1,2,3,1]原创 2024-07-05 20:27:53 · 380 阅读 · 0 评论 -
给定一行n个格子,红黄蓝涂色
1、描述有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.2、思路动态规划,到数第二个格子,和第一个格子是否相同,如果相同,最后一个就有两种方式,如果不同,最后一个格子,就只有一种方式了,5、code#include<stdio.h>int main(){int n,i;long long f[99];while(scanf("%d",&n)!=EO原创 2021-09-19 18:31:05 · 1960 阅读 · 0 评论 -
只有两个键的键盘,只会复制粘贴
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述最初记事本上只有一个字符 ‘A’ 。你每次可以对这个记事本进行两种操作:Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。Paste(粘贴):粘贴 上一次 复制的字符。给你一个数字 n ,你需要使用最少的操作次数,在记事本上输出 恰好 n 个 ‘A’ 。返回能够打印出 n 个 ‘A’ 的最少操作次数。示例 1:输入:3输出:3解释:最初, 只有一个字符 ‘A’。第 1 步, 使原创 2021-09-19 17:11:38 · 394 阅读 · 0 评论 -
买卖股票的最佳时机,最多两次+++汇总(背?)
文章目录1、描述2、关键字3、思路6、code7、最多K次8、含手续费9、含冷冻期1、描述买卖股票的最佳时机,最多两次给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这原创 2021-08-19 20:08:43 · 252 阅读 · 0 评论 -
购买股票的时机,可多次交易
1、描述买卖股票的最佳时机 II给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随原创 2021-08-19 19:07:23 · 269 阅读 · 0 评论 -
买股票的最佳时机,只买卖一次 & 多次,(就是一个最大子段和)
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,原创 2021-08-19 18:40:26 · 260 阅读 · 1 评论 -
递增子序列变形2,类似俄罗斯套娃子
1、描述小强现在有个物品,每个物品有两种属性和.他想要从中挑出尽可能多的物品满足以下条件:对于任意两个物品和,满足或者.问最多能挑出多少物品.输入描述:第一行输入一个正整数.表示有组数据.对于每组数据,第一行输入一个正整数.表示物品个数.接下来两行,每行有个整数.第一行表示个节点的属性.第二行表示个节点的属性.输出描述:输出行,每一行对应每组数据的输出.链接2、关键字两个:x大,则y,大,统计最多相应大小的个数3、思路搞一个结构体,把x和y对应起来,搞一个vector,然后对这个原创 2021-08-13 17:43:06 · 625 阅读 · 0 评论 -
连续和为sum的子段和
题目描述:输入一个sum,输出所有和为sum的连续序列,如输入9,输出[ [2,3,4[,[4,5] ],从小到大排序,思路1:暴力两层循环1、迭代器存储最后答案,迭代器元素,是一个个长度不同的迭代器,C++中两层迭代器时,[ ]外层不好使,直接更新内层迭代器之后,用push_back()插入就好 vec.emplace_back()2、if else if 时< 和&l...原创 2020-03-06 11:23:28 · 177 阅读 · 0 评论 -
构建乘积数组
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]来源:力扣(LeetCode)链接著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注原创 2021-07-13 21:48:54 · 116 阅读 · 0 评论 -
零钱兑换1最少硬币个数 &2 最多的组合数
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/coin-change-原创 2021-06-10 09:47:09 · 169 阅读 · 0 评论 -
礼物的最大价值
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物来源:力扣(LeetCode)原创 2021-06-02 16:29:02 · 100 阅读 · 0 评论 -
字符串打印机
1、描述有台奇怪的打印机有以下两个特殊要求:打印机每次只能打印由 同一个字符 组成的序列。每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符。给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。示例 1:输入:s = “aaabbb”输出:2解释:首先打印 “aaa” 然后打印 “bbb”。来源:力扣(LeetCode)链接著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字字符串,覆盖打印3、思路dp一个题解分析原创 2021-05-24 10:07:03 · 251 阅读 · 0 评论 -
不相交的线,
1、描述在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:nums1[i] == nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。来源:力扣(LeetCode)链接著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关原创 2021-05-21 14:33:14 · 180 阅读 · 0 评论 -
最大整除子集
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:answer[i] % answer[j] == 0 ,或answer[j] % answer[i] == 0如果存在多个有效解子集,返回其中任何一个均可。示例 1:输入:nums = [1,2,3]输出:[1,2]解释:[1,3] 也会被原创 2021-04-23 20:52:00 · 272 阅读 · 0 评论 -
解码方式
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述一条包含字母 A-Z 的消息通过以下映射进行了 编码 :‘A’ -> 1‘B’ -> 2…‘Z’ -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为:“AAJF” ,将消息分组为 (1 1 10 6)“KJF” ,将消息分组为 (11 10 6)注意,消息不能分组为 (1 11 06) ,因为 “06” 不能映原创 2021-04-21 09:35:46 · 946 阅读 · 0 评论 -
斐波
动态规划,斐波那契数求出第n个数:notes取模:1e9+7:1后面9个0,然后再加7,也就是1000000007;取模求一个取一下class Solution {public: int fib(int n) { size_t a=0; size_t b=1; size_t c=1; if(n == 0) return 0; if(n == 1 ) return 1;原创 2021-03-29 20:16:03 · 244 阅读 · 0 评论 -
连续数组求最长子段和
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给定一个整数数组,找出总和最大的连续数列,并返回总和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。来源:力扣(LeetCode)链接著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字数组,连续最大子段和,3、思路dp,一趟遍历,更新dp数组,当前dp[i]的来路,要么是dp[i-1]+数组当前原创 2021-03-17 22:29:26 · 523 阅读 · 0 评论 -
不同的子序列公共子串
1、描述115给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)题目数据保证答案符合 32 位带符号整数范围。示例 1:输入:s = “rabbbit”, t = “rabbit”输出:3解释:如下图所示, 有 3 种可以从 s 中得到 “rabbit” 的方案。(上箭头符号 ^ 表示原创 2021-03-17 17:05:16 · 151 阅读 · 0 评论 -
最长非连续公共子串002
1、描述1143给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。示例 1:输入:text1 = “abcde”, text原创 2021-03-16 15:12:45 · 389 阅读 · 0 评论 -
最长连续公共子数组,子串
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述718最长连续公共子串,给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray著作权归原创 2021-03-16 13:24:21 · 343 阅读 · 1 评论 -
最大子段和0004
1、描述53给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。2、思路dp找dp数组,3、code//1暴力,就是直接遍历两边就好了class Solution {public: int maxSubArray(vector<int>& nums) { i原创 2021-03-11 16:54:45 · 163 阅读 · 1 评论 -
俄罗斯套娃子
1、描述354给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。示例:输入: envelopes = [[5,4],[6,4],[6,7],[2,3]]输出: 3解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,原创 2021-03-04 17:30:34 · 177 阅读 · 1 评论 -
LIS最长递增子序列的长度、个数
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,原创 2021-03-04 17:15:19 · 259 阅读 · 1 评论 -
最佳买卖股票时机含冷冻期001
1、描述309给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]来源:力扣(LeetCode)链接:https://leetcode-原创 2020-07-10 23:48:26 · 146 阅读 · 0 评论 -
不同路径001
1、描述63一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-paths-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。如下:网格中的障碍物和空位置原创 2020-07-06 15:13:52 · 126 阅读 · 0 评论 -
杨辉三角001
文章目录1、描述2、思路4、复杂度5、code1、描述输入一个数n,输出n行杨辉三角,例如输入5,会输出11 11 2 11 3 3 11 4 6 4 12、思路直接生成看了题解才想起来我这属于带缓存的动态规划4、复杂度时间:O(N2平方)空间:需要存每个数据所以和时间复杂度一样O(N2平方)5、codeclass Solution {public: vector<vector<int>> generate(int numRows) {原创 2020-06-13 20:46:53 · 246 阅读 · 0 评论 -
最小代价爬到楼顶
#1、描述数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:输入: cost = [10, 15, 20]输出: 15解释: 最...原创 2020-03-25 21:32:17 · 127 阅读 · 0 评论 -
数组区域和检索
#1、描述 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。示例:给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()sumRange(0, 2) -> 1sumRange(2, 5) -> -1sumRange(0, 5) -> -3说...原创 2020-03-24 21:04:45 · 346 阅读 · 0 评论 -
爬楼梯
#1、假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/climbin...原创 2020-03-24 17:25:23 · 248 阅读 · 1 评论