- 博客(19)
- 收藏
- 关注
原创 启航预备役每日总结19
当我们要放置前 i本书时候,假定前 j本书放在上面的书架上,其中 j<i, 前 j本书放好后剩余的书放在最后一层书架上, 这一层书架的高度是这部分书的高度最大值,由此得到如此递推公式:dp[i]=min(dp[j]+max(books[k]))其中满足0≤j≤k<i≤n,∑books[k]≤shelfWidth我们循环遍历 i, 求出 dp[i]的值,最后返回 dp[n]为最终答案。重复这个过程,直到把所有的书都放在书架上。考虑用动态规划来解决这个问题,dp[i]来表示放下前 i本书所用的最小高度。
2023-04-23 23:59:48
104
原创 启航预备役每日总结18
可以运用动态规划的思想,定义 f[i][j] 表示以 nums[i] 结尾且公差为 j 的等差数列的最大长度。由于公差可能为负数,且最大差值为 500,因此,我们可以将统一将公差加上 500,这样公差的范围就变成了 [0,1000]。考虑 f[i],我们可以枚举 nums[i]的前一个元素 nums[k],那么公差 j=nums[i]−nums[k]+500,此时有 f[i][j]=max(f[i][j],f[k][j]+1),然后我们更新答案 ans=max(ans,f[i][j])。
2023-04-22 21:32:00
109
原创 启航预备役每日总结17
记前者的指针为 i,后者的指针为 ptr当 spaces 恰好与 i 相等时,我们在答案字符串的末尾放入一个空格,并将 ptr向右移动一个位置。此外,还需要在答案字符串的末尾放入 s[i],并将 i向右移动一个位置。在两个指针全部遍历完成后,就得到了修改后的字符串。优化删除图书时的操作,有书名和作者相同的书都要陈列,然后再根据查出来的书号删除。优化了密码修改,只要输入密码就可以,因为已经登录,账号不需要进行输入比较。优化图书的记录,输入的图书编号和文件中的相同则报错,要重新输入。
2023-04-21 22:21:35
117
原创 启航预备役每日总结16
还要优化删除图书时的操作,有书名和作者相同的书都要陈列,然后再根据查出来的书号删除。可以进行用户的登录,输入的账号和密码会和文件中的账号密码进行对比。再优化图书的记录,输入的图书编号和文件中的相同则报错,要重新输入。中还有可用的元素,并且可以替换掉序列中的上一个元素,那么在。,即当前元素大于序列的最后一个元素,则直接将当前元素赋值给。个元素进行替换操作时,数组的最后一个元素的最小值。都为空时,数组的最后一个元素的最小值为。的所有可能的组合,进行状态转移。,表示可以直接使用该元素,无需替换操作。
2023-04-20 22:39:43
101
原创 启航预备役每日总结15
试想当前枚举到了 i,把 i 当做这一组的末尾,然后在 [i−k,i−1]的范围内枚举 j,[j+1,i] 这一段可以当做新的一组。这时我们需要利用以 j为结尾分割的最大和,可以发现如果将这个问题的答案提前计算并存储下来,以 i为结尾的问题就可以迎刃而解。设 d[i] 为以 i结尾分割的最大和,求解时倒序枚举 j (j∈[i−k,i−1]),那么转移方程有:d[i]=max{d[j]+maxValue×(i−j)},其中 maxValue=max{arr[j+1],⋯ ,arr[i]}。
2023-04-19 22:51:05
92
原创 启航预备役每日总结14
可以按照枚举的思路,我们可以枚举子孙节点,然后找出它的所有祖先节点,计算绝对差值。假设当前搜索的节点值为 val,那么与该子孙节点与它的所有祖先节点的绝对差值最大值为 max(∣val−mi∣,∣val−ma∣),搜索该节点的左子树与右子树时,对应的 mi=min(mi,val),ma=max(ma,val)。可以利用栈的知识,从左往右进行遍历,当前柱子的高度小于等于栈顶柱子的高度时,可以计算以栈顶柱子高度为高的矩形面积,计算面积时,如果栈为空,说明当前柱子是第一个柱子,宽度为当前下标i;
2023-04-18 22:51:26
110
原创 启航预备役每日总结13
计算输入中的每个日子在一年中是第几天时,可以利用前缀和数组来降低每次计算的复杂度。知道每个日子是一年中的第几天后,可以先通过比较算出两人到达日子的最大值,离开日子的最小值,然后利用减法计算重合的日子。为节省时间复杂度,我们可以先将从第一个数字到第i个数字的和算出来保存在perfixSum数组中,然后再从0到p遍历,它们的差即perfisSum[t]-perfisSum[f-1],就是所求答案,最后把每个值打印即可,要注意的是不能用int,因为会溢出,使用long long可以避免。
2023-04-17 22:43:27
96
原创 启航预备役每日总结12
打算先把整个简单的框架写出,然后再修改里面的内容,变成更急复杂,即使用较多的数据结构中的内容,由于今天下午开会,以及中午要写其他学科作业以及完成每日的刷题,还有晚上要写限时,还要夜跑锻炼体魄,夜跑回来还要写报告,以及很多琐事,所以只有上午有时间,没写很多,明天尽量腾出时间写,非常抱歉。不仅专注于学习,也要坚持每日锻炼,加强身体素质,做到全面良好发展,可能并没有锻炼很久,但是积少成多,每天锻炼,一定会有成果。然后准备了个链式的头文件,可以用于创建,增加,输出,删除结点的内容。开始了项目:图书管理系统。
2023-04-16 22:04:50
123
原创 启航预备役每日总结11
fgets(字符数组,字符长度(n),文件指针),从指针指向的文件读入一个长度为(n-1)的字符串,存放到字符数组中,因为最后一要加一个‘\0'字符。在网上寻找了有关图书管理系统的视频,观看并思考自己该如何正确编写该系统,系统大体内容是有读者和管理员两种类别,管理员登陆后,有删除,添加,查找,排序等管理手段,读者登录,若没有该账号则需要注册,也可以进行账号的注销,读者有借阅的手段,还要设计一个登录界面,有注册,登录,退出等内容,准备明天开始进行编写项目,并时刻对其内容进行优化。(5)文件读写的出错检测。
2023-04-15 23:21:17
105
原创 启航预备役每日总结10
1.每日一题驼峰式匹配https://leetcode.cn/problems/camelcase-matching/思路与算法:可以运用双指针的方法,设待检验字符串是 queries[i],如果 pattern是queries[i]的子序列,并且去掉 pattern 之后 queries[i]的剩余部分都由小写字母构成,那么 queries[i] 就与 pattern 匹配。具体来说,我们维护一个下标 p,用来遍历 pattern,然后遍历 queries[i]中的每个字符 c,如果
2023-04-14 22:47:47
103
原创 启航预备役每日总结9
希尔排序的特点是可以在一开始就对数组或列表的大跨度进行排序,从而提前将较小或较大的元素移动到正确的位置,减少了插入排序中的元素移动次数,从而提高了排序的效率。从当前顶点出发,选择一个未访问的相邻顶点,沿着一条未访问的边深入图中。归并排序的基本思想是将数组或链表划分为较小的子数组或子链表,分别对子数组或子链表进行排序,然后再将已经排序好的子数组或子链表合并成一个有序的数组或链表。BFS的基本思想是从一个起始顶点开始,先访问其所有的相邻顶点,然后再访问相邻顶点的相邻顶点,以此类推,直到遍历到所有的顶点为止。
2023-04-13 23:36:58
108
原创 启航预备役每日总结8
(3)关于实现构造哈夫曼树,首先应初始化,要动态申请2n个单元,然后循环2n-1次,从1号单元开始,依次将1到2n-1所有单元中的双亲,左孩子,右孩子的下标都初始化为0,最后循环n次,输入前n个单元中叶子结点的权值。(2)线索二叉树的前驱或后继的信息只有再遍历时才能得到,因此线索化的过程即在遍历的过程中修改空指针的过程,所以可以使用递归算法,对二叉树按照不同的遍历次序线索化,可以得到不同的线索二叉树,即包括先序线索二叉树,中序线索二叉树和后序线索二叉树。二叉树可以为空树,也可以包含一个或多个节点。
2023-04-12 22:46:18
88
原创 启航预备役每日总结7
BFS的基本思想是从起始节点开始,逐层地访问节点的邻居节点,即先访问距离起始节点距离为1的节点,然后是距离为2的节点,依此类推,直到访问到距离起始节点最远的节点。再重复以下步骤直到队列为空:从队列中弹出一个节点作为当前节点,然后访问当前节点,并处理当前节点的信息,再是访问当前节点的未被访问的邻居节点,并将其标记为已访问,并将其入队。(2)BFS的特点是按层次逐层地进行搜索,从起始节点开始,先访问距离起始节点距离为1的节点,再访问距离为2的节点,依此类推,直到所有节点都被访问或找到目标节点。
2023-04-11 23:16:41
108
原创 启航预备役每日总结6
从它的定义中,可得到遍历二叉树的有递归算法,有先序,中序,后序的遍历二叉树操作,其中中序遍历二叉树的递归算法较容易理解,它的主要操作是先判断二叉树是否为空,若不为空,则按顺序遍历左子树,根结点和右子树,然后进行递归。当遍历到一个新的元素时,检查其是否大于栈顶元素,如果是,说明当前元素是栈顶元素的下一个更大的元素,将栈顶元素弹出,并将其下标作为索引在ans数组中对应位置赋值为当前元素的值。(1)哈夫曼树又称最优树,是一类带权路径长度最短的树,权是指赋予某个实体的一个量,是对实体的某个或某些属性的数值化描述。
2023-04-10 22:37:24
80
原创 启航预备役每日总结5
如果房屋数量大于两间,对于第 k (k>2) 间房屋,有两个选项:偷窃第 k 间房屋,那么就不能偷窃第 k−1间房屋,偷窃总金额为前 k−2 间房屋的最高总金额与第 k 间房屋的金额之和。每次计算四个数的和,并进行如下操作:如果和等于 target,则将枚举到的四个数加到答案中,然后将左指针右移直到遇到不同的数,将右指针左移直到遇到不同的数;(1)图G是由两个集合V和E组成,即为G=(V,E),其中V是顶点的有穷非空集合,E是V中顶点偶对的有限集合,这些顶点偶对称为边。所以一个连通图的生成树不唯一。
2023-04-09 23:04:33
90
原创 启航预备役每日总结4
1.每日一题快乐数https://leetcode.cn/problems/happy-number/description/?languageTags=cpp思路与算法:可以使用 “快慢指针” 的思想,来找出循环。“快指针” 每次走两步,“慢指针” 每次走一步,当二者的值相等时,即为一个循环周期。此时,若是1 引起的循环,那么就是快乐数,否则就不是快乐数。 此题不建议用集合记录每次的计算结果或使用递归的算法来判断是否进入循环,因为可能会大到无法存储,浪费空间。代码如下:#i
2023-04-08 22:29:55
102
1
原创 启航预备役每日总结3
从它的定义中,可得到遍历二叉树的有递归算法,有先序,中序,后序的遍历二叉树操作,其中中序遍历二叉树的递归算法较容易理解,它的主要操作是先判断二叉树是否为空,若不为空,则按顺序遍历左子树,根结点和右子树,然后进行递归。(1)森林转换成二叉树的规则为将森林中的每棵树转换为二叉树,将第一棵树的根作为转换后的二叉树的根,将第一棵树的左子树作为转换后二叉树根的左子树,将第二棵树作为转换后二叉树的右子树,将第三棵树作为转换后二叉树根的右子树的右子树,以此类推,就可将森林转换为二叉树。
2023-04-07 22:45:10
237
1
原创 启航预备役每日总结2
由于广义表中的数据元素可以有不同的结构,所以通常采用链式的存储结构,而又由于广义表中的数据元素可能为原子或广义表,因此需要两种结构的结点,分别为表结点,来表示广义表;原子结点,来表示原子。多对角线矩阵是除了对角线上和直接在对角线上,下方若干条与对角线平行的线上的元素之外,所有其他的元均为0,对这种矩阵,也可以按以行为主,或以对角线的顺序将其压缩存储到一维数组上。定义时,其中可以是单个元素,也可以是广义表,分别称为广义表的原子和子表,且在描述广义表时用到了了广义表的概念,即定义也是一个递归的定义。
2023-04-06 22:54:18
105
1
原创 启航预备役每日总结
线段树是一棵二叉树,它的每个叶子节点对应着原序列中的一个元素,每个非叶子节点代表的区间是其左右子节点代表的区间的并集。对于区间修改操作,可以将线段树视为一颗区间树,从根节点开始,递归地向下访问节点,直到找到表示需要修改的区间的节点。对于区间查询操作,也是从根节点开始,递归地向下访问节点,直到找到表示需要查询的区间的节点。是将比较过程中主串的指针由回溯变为模式向后滑动,主串的指针不需回溯,且整个匹配过程中,对主串仅需从头至尾查找一边,其中要求得next函数来进行模式指针的向后滑动。最后返回公因子个数即可。
2023-04-05 23:40:29
106
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅