随笔分类 -  数据结构与算法

摘要:还是动态规划,这里需要乘除法来计算位置,因为粘贴操作是位数增加的。我们使用一个一维数组dp,其中位置i表示延展到长度i的最少操作次数。 阅读全文
posted @ 2022-07-02 22:23 okokabcd 阅读(63) 评论(0) 推荐(0)
摘要:每个硬币可以用无限多次,所以是完全背包问题。dp[i]表示,达到总金额i所需的最少硬币数,因为求最少硬币数所以先将dp初始化为amount+2,状态转移方程为:dp[i] = min(dp[i], dp[i-coin] + 1) 阅读全文
posted @ 2022-07-01 12:30 okokabcd 阅读(84) 评论(0) 推荐(0)
摘要:这道题也是一个背包问题,背包问题:有N个物品和容量为W的背包,每个物品都有自己的体积w和价值v,求拿哪些物品可以使得背包所装下物品的总价值最大。如果限定每种物品只能选择0个或1个,则问题称为0-1背包问题; 阅读全文
posted @ 2022-06-30 23:01 okokabcd 阅读(74) 评论(0) 推荐(0)
摘要:设所有数字和为sum,我们的目标是选取一个子数组,使它的总和为sum/2,定义二维boolean数组dp[i][j],其意义是使用前i个数字的和能不能构成整数j。 阅读全文
posted @ 2022-06-29 22:02 okokabcd 阅读(63) 评论(0) 推荐(0)
摘要:使用动态规划来解决本题,定义一个二维数组dp,其中dp[i][j]表示到第一个字符串位置i为止、到第二个字符串位置j为止、最长的公共子序列长度。这样一来我们就可以很方便地分情况讨论这两个位置对应的字母相同中与不同的情况了。 阅读全文
posted @ 2022-06-26 22:35 okokabcd 阅读(67) 评论(0) 推荐(0)
摘要:核心思想是使用一个数组dp来保存,dp[i]的意义是到该位置为止的最长递增子序列。最后求所有位置的最大值,而不是dp的最后元素。 阅读全文
posted @ 2022-06-25 23:23 okokabcd 阅读(54) 评论(0) 推荐(0)
摘要:这道题的分割条件由集合内的字符串决定,因此在考虑每个分割位置时,需要遍历字符串集合,以确定当前位置是否可以成功分割,注意对于位置0,需要初始化值为真。 阅读全文
posted @ 2022-06-24 12:59 okokabcd 阅读(66) 评论(0) 推荐(0)
摘要:leetcode 91. Decode Ways 解码方法(中等) 阅读全文
posted @ 2022-06-22 22:51 okokabcd 阅读(89) 评论(0) 推荐(0)
摘要:动态规划,dp[i]表示i有几个完全平方数的加和构成,枚举比i小的完全平方数,状态转移方程为dp[i] = min(dp[i-k] + 1) ,k就是完全平方数 阅读全文
posted @ 2022-06-21 22:48 okokabcd 阅读(79) 评论(0) 推荐(0)
摘要:使用动态规划来解决,使用dp[i][j]表示以(i,j)为右下角,且只饮食1的正方形的边长最大值。如果我们能计算出所有dp[i][j]的值,那么其中的最大值即为矩阵中只饮食1的下方形的边长最大值,其平方即为最大下方形的面积。 阅读全文
posted @ 2022-06-20 22:23 okokabcd 阅读(94) 评论(0) 推荐(0)
摘要:判断使用动态规划思路解决问题,先定义一个数组dp[][]来,找到状态转移方程式。本题需要从左上开始搜索一次,右下开始搜索一次。 阅读全文
posted @ 2022-06-19 21:48 okokabcd 阅读(71) 评论(0) 推荐(0)
摘要:二维的动态规则,定义一个二维dp数组,其中dp[i][j]表示从左上角开始到(i, j)位置的最优路径的数字和。因为每次只能向下或者向右移动,我们可以得到状态转移方程dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]。 阅读全文
posted @ 2022-06-18 22:52 okokabcd 阅读(68) 评论(0) 推荐(0)
摘要:因为是求等差数列,可以想到满足num[i]-num[i-1]=num[i-1]-num[i-2] 阅读全文
posted @ 2022-06-17 21:22 okokabcd 阅读(84) 评论(0) 推荐(0)
摘要:动态规划,把转移方程找出来就解决一半了 leetcode 198. House Robber 打家劫舍(中等) 阅读全文
posted @ 2022-06-16 20:48 okokabcd 阅读(67) 评论(0) 推荐(0)
摘要:这是个斐波那契数列题。定义一个数组dp,dp[i]表示走到第i阶的方法数。因为我们每次可以走一步或两步,所以第i阶可以从第i-1阶或i-2阶到达。换句话说,走到第i阶的方法数为走到第i-1阶的方法数加上走到第i-2阶的方法数。这样我们就得到了状态转移方程dp[i]=dp[i-1]+dp[i-2]。注意边界条件的处理。 阅读全文
posted @ 2022-06-14 21:25 okokabcd 阅读(122) 评论(0) 推荐(0)
摘要:leetcode 310. Minimum Height Trees 最小高度树(中等) 阅读全文
posted @ 2022-06-13 21:51 okokabcd 阅读(109) 评论(0) 推荐(0)
摘要:解决方法,先构造一个hashmap,key是元素,value是元素的个数,然后再用回溯法来解决 阅读全文
posted @ 2022-06-12 12:43 okokabcd 阅读(86) 评论(0) 推荐(0)
摘要:dfs解决即可 阅读全文
posted @ 2022-06-11 21:58 okokabcd 阅读(51) 评论(0) 推荐(0)
摘要:找联通分量问题用DFS来做,主要是细节的优化。可以从这个地方入手,任何不在边界上的O都会变成X。也可以反向思维先找没有被包围的。具体的实现思路:从边界出发,去找和边界相连的O,把它标记成一个特殊值,再把网格中其他的O标记成X,最后再把第一步标记成特殊值的O还原 阅读全文
posted @ 2022-06-10 21:14 okokabcd 阅读(64) 评论(0) 推荐(0)
摘要:我们可以把起始字符串、终止字符串、以及单词表里所有的字符串想象成节点。若两个字符串只有一个字符不同,那它们相连。因为题目需要输出个性次数最少的所有修改方式,因此我们可以使用广度优先搜索,求得起始节点到终止节点的最短距离。 阅读全文
posted @ 2022-06-08 18:43 okokabcd 阅读(104) 评论(0) 推荐(0)