- 博客(24)
- 收藏
- 关注
原创 每日一题之最长回文子序列
如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。对dp进行初始化,当i与j相同,那么dp[i][j]一定是等于1的,即:一个字符的回文子序列长度就是1。那么dp[i][j]一定是取最大的,即:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);如果s[i]与s[j]相同,那么dp[i][j] = dp[i + 1][j - 1] + 2;
2023-11-10 09:11:49 73
原创 每日一题之回文子串
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。6个回文子串: "a", "a", "a", "aa", "aa", "aaa"当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况。三个回文子串: "a", "b", "c"是字符串中的由连续字符组成的一个序列。是正着读和倒过来读一样的字符串。,请你统计并返回这个字符串中。
2023-11-09 10:10:44 61
原创 每日一题之两个字符串的删除操作
确定递推公式,当word1[i - 1] 与 word2[j - 1]相同的时候,dp[i][j] = dp[i - 1][j - 1];dp[i][0]:word2为空字符串,以i-1为结尾的字符串word1要删除多少个元素,才能和word2相同呢,很明显dp[i][0] = i,dp[0][j]的话同理。情况三:同时删word1[i - 1]和word2[j - 1],操作的最少次数为dp[i - 1][j - 1] + 2,最后要取最小值。可以删除任意一个字符串中的一个字符。
2023-11-08 09:10:09 79
原创 每日一题之不同的子序列
即dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];当s[i - 1] 与 t[j - 1]不相等时,dp[i][j]只有一部分组成,不用s[i - 1]来匹配即dp[i][j] = dp[i - 1][j];首先需要定义dp数组的含义,dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j],我们需要考虑两种情况,第一种是、当s[i - 1] 与 t[j - 1]相等时,dp[i][j]可以有两部分组成。
2023-11-06 10:50:58 51
原创 每日一题之最长公共子序列
如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。这题也是动态规划的经典题目,首先我们要确定dp数组的下标及其含义,dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]。最长公共子序列是 "ace" ,它的长度为 3。
2023-11-03 08:35:58 44
原创 每日一题之最长重复子数组
如果定义 dp[i][j]为 以下标i为结尾的A,和以下标j 为结尾的B,那么 第一行和第一列毕竟要进行初始化,如果nums1[i] 与 nums2[0] 相同的话,对应的 dp[i][0]就要初始为1, 因为此时最长重复子数组为1。nums2[j] 与 nums1[0]相同的话,同理我们也可以用以下标i为结尾的A和以下标j为结尾的B来定义数组,只不过二者在初始化数组上与区别,根据dp[i][j]的定义,dp[i][j]的状态只能由dp[i - 1][j - 1]推导出来。、长度最长的子数组的长度。
2023-11-02 09:18:42 50 1
原创 每日一题之最长连续递增序列
尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。最长连续递增序列是 [1,3,5], 长度为3。最长连续递增序列是 [2], 长度为1。给定一个未经排序的整数数组,找到最长且。,并返回该序列的长度。)确定,如果对于每个。就是连续递增子序列。
2023-11-01 09:10:59 56 1
原创 每日一题之最长递增子序列
这题可以用动态规划来做,依然需要用到动态规划五部曲,首先需要定义dp[i]用来表示以nums[i]为尾的最长子序列长度,位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 + 1 的最大值。所以:if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。最长递增子序列是 [2,3,7,101],因此长度为 4。,找到其中最长严格递增子序列的长度。
2023-10-31 09:25:01 56 1
原创 每日一题之一和零
接下来我们要初始化数组dp[0][0]=0,接着就是遍历顺序了,但我们需要求出在这个字符串数组中0和1的个数,这就要先遍历数组了,之后在遍历是由于是01背包问题,要先遍历物品也就是str数组,在遍历背包也就是mn,重点是从前向后遍历,dp[i][j] 可以由前一个strs里的字符串推导出来,strs里的字符串有zeroNum个0,oneNum个1。输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3。
2023-10-30 09:11:50 59 1
原创 每日一题之目标和
所以我们要求的是 x - (sum - x) = target。dp[j-nums[i]]表示j元素前一个元素的最大背包容量。假设加法的总和为x,那么减法对应的总和就是sum - x。此时背包容量就变成了x,注意不是target。返回可以通过上述方法构造的、运算结果等于。一共有 5 种方法让最终目标和为 3。,然后串联起所有整数,可以构造一个。首先这一题这一看和背包问题没有关系,向数组中的每个整数前添加。如何转化为01背包问题呢。给你一个非负整数数组。
2023-10-28 21:21:32 53 1
原创 每日一题之最后一块石头的重量
这道题看似复杂,但我们可以把它转换成背包问题,求石头的最小重量,我们只需要让两块石头分的重量尽可能的相近,可以先求出石头的重量,然后和2相除取整就可以了,此时target=num/2,我们再用动态规划五部曲解决,说实话就是套模板,组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值。组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],组合 2 和 1,得到 1,所以数组转化为 [1,1,1],,然后将它们一起粉碎。
2023-10-27 09:27:37 45 1
原创 每日一题之分割等和子集
递推公式为dp[j]=max(dp[j],dp[j-nums[i]]+nums[i])这里的dp[j-nums[i]]表示最大元素减去还没放入元素nums[i],我们也可以把dp[j]理解成一个最大容量的背包。dp[2] = dp[2 - nums[0]] + nums[0] = 1(dp数组已经都初始化为0)此时dp[2]就已经是2了,意味着元素nums[i],被放入了两次,所以不能正序遍历。数组可以分割成 [1, 5, 5] 和 [11]。数组不能分割成两个元素和相等的子集。倒序就是先算dp[2]
2023-10-25 09:55:00 35
原创 每日一题之不同的二叉搜索树
这题同样是动态规划,我们用dp[i]表示i个节点的二叉搜索树数目,当i=0时,二叉树的数目为一,当i=1时,二叉树的数目为1,由此我们可以推断当n为3时,就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量。元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量。所以dp[i]=dp[j-1]+dp[i-j]
2023-10-24 09:23:55 36
原创 每日一题之不同的二叉搜索树
这题同样是动态规划,我们用dp[i]表示i个节点的二叉搜索树数目,当i=0时,二叉树的数目为一,当i=1时,二叉树的数目为1,由此我们可以推断当n为3时,就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量。元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量。所以dp[i]=dp[j-1]+dp[i-j]
2023-10-24 09:19:59 39
原创 每日一题之不同路径问题
这里要看一下递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。
2023-10-23 09:19:40 270
原创 每日一题之爬楼梯
这题看着是一道动态规划题,但可以用暴力解法来算,把前几种情况列出来会发现当前需要的方法是前两阶台阶的和。写的不知道对不对,不对的话希望大佬给出指导意见!你有多少种不同的方法可以爬到楼顶呢?1. 1 阶 + 1 阶 + 1 阶。有两种方法可以爬到楼顶。1. 1 阶 + 1 阶。有三种方法可以爬到楼顶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。
2023-10-20 10:20:31 45 1
原创 【GO语言学习笔记】之互联网协议
互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网。首先需要了解的就是最常见的七种分层模型,依次为物理层数据链路层网络层传输层会话层表示层以及应用层。互联网按照不同的模型划分会有不用的分层,但是不论按照什么模型去划分,越往上的层越靠近用户,越往下的层越靠近硬件。
2023-10-20 08:00:00 45 1
原创 【GO语言学习笔记】之go操作MySQL
首先我们需要创建一张表,如下:接着我们需要导入两个包,在命令行输入:之后我们就可以开始数据库的增删改查操作了。
2023-10-18 21:09:14 71
原创 每日一题之力扣第45题:跳跃问题2
给定一个长度为n的整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意i + j < n返回到达的最小跳跃次数。生成的测试用例可以到达。
2023-10-18 17:41:58 114
原创 【面试复习】Java—构造器14连问
一、构造器的作用是什么?答:构造器用于给对象属性赋初值,用于初始化对象的状态。特点:方法名和类名一样。 没有返回值,且不能用void修饰。 构造器中的参数可有可无。简言之:构造器就是的作用就是创造对象。二、构造器里可以给静态变量赋值吗答:可以原理:静态变量只能定义全局的,构造方法中不能定义。补充:可以,但是用final修饰的静态变量无法再构造器中赋值。三、抽象类里面有构造器吗?答:可以...
2022-07-07 12:43:06 572 1
原创 我的编程之路——C语言(数据类型)
目录前言数据类型1.整数类型2.字符类型3.浮点类型前言我今年大一才开始学编程,不喜勿喷本内容是引荐菜鸟教程的c语言,如果侵权联系版主删除!!!!数据类型1.整数类型整数类型顾名思义就是对整数进行处理,如我们常见的int属于基本整型,当然还有其他,不同的整型所占的存储大小和值范围也是不同的,下表会给出不同整型的存储大小和值范围:类型 存储 值范围 char 1 字节 -128 到 127 或 0 到 255 unsig.
2021-11-07 15:04:44 734 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人