作业题解
本专栏将讲解我做过的部分作业题的思路,并可运行的代码,包括数据结构,Python,算法等课的作业
lzdhs
这个作者很懒,什么都没留下…
展开
-
作业题解--生成排列&&统计多数元素
主要代码集中在exchange函数,st和ed表示当前处理的子数组的起始和终止位置,先看else部分,函数将遍历从st到n-1的每个元素,使用swap函数将当前元素a[st]与遍历到的元素交换位置,然后递归调用exchange函数处理下一个元素(即st+1到ed的子数组)。第四题是要求输入一个整数n,生成它的从1-n的所有排列方式,例如输入3,则输出1 2 3;【问题描述】给定一个大小为 n 的数组 nums ,返回其中的多数元素。【输入形式】输入的第1行中有1个数字n,表示数组的长度;原创 2024-09-19 17:33:04 · 212 阅读 · 0 评论 -
作业题解-202203-3-计算资源调度
这道题用到了大量的stl,stl的具体操作请上网学习,或者评论区问我都可以。第三题就有一点难度了,题干也比较长。转载 2024-09-14 16:17:30 · 22 阅读 · 0 评论 -
作业题解-202203-2-出行计划
我们这个算法是考虑场所的需求,即从l-r时刻内进入场所都是符合要求的,即数组中每个点的代表的是该时刻可进入的场所。每次对左端到右端所有数加1,(在函数中仅仅是在端点加,实际上需要通过前缀和的算法才能实际加上去)表明在这个时间段内每个时刻可进入的场所+1.言归正传,不要小看这道题,如果用暴力算法是会超时的,我第一次做就超了一组数据。那么我们来看下面这个标准答案的代码,用到了前缀和差分的算法。2024年做这道题还是很感慨的哈哈哈哈,时代的眼泪。关于前缀和算法请参考下面这篇文章。这篇文章讲的题还是csp的。转载 2024-09-13 08:30:00 · 21 阅读 · 0 评论 -
螺旋数字矩阵的思路
当坐标变化后如果遇到边界或到了已经打印的位置,就按照设定方向的反方向后退一格(即上一个打印的位置),然后换方向,此时只有i或j发生变化,而k不变化,因为下一个坐标1值就是k现在的值。原创 2024-04-14 18:51:16 · 1751 阅读 · 1 评论 -
蛇形矩阵代码思路
因为当n=3时后者会发生错误,n=3时,(n*n)/2=4,4应该在左下角,超出的是左下边界,若我们把4放在后半部分判断,则它就不符合超过左下角的处理规则了,所以把它放在前半部分处理,而前半部分结束条件是(n*n)/2+1还是(n*n)/2是对n=3非常关键的,读者不妨自行画一下,有助于理解。当我把签到题写完后,便想起了作业题里面的内容,一道是刚才写的螺旋矩阵,另一个还是矩阵,蛇形矩阵,那么这篇文章将为大家介绍一下这道题目并且分享一下我的代码思路。还是先上代码,然后分析思路,这次我把一些思路放在注释当中。原创 2024-04-15 19:06:03 · 1183 阅读 · 1 评论 -
根据前序和中序遍历确定二叉树
接下来我们看左子树,根据先序序列可以得到A为左子树的根节点,然后再次根据根节点在中序序列里的位置来判断左右子树,所以BD是左子树,AEFC是右子树。要找到根节点,需要通过先序序列找到,显而易见,先序序列的第一个字母就是整个二叉树的根节点,所以我们在函数的最开始为它分配空间,同时赋好值。以本题为例,G为根节点。既然我们知道了根节点,那么我们就可以通过中序序列来分开左右子树了,显然,在根节点左边的为左子树,右边的为右子树。一道关于二叉树共同祖先的题目,不过这次我想分享的并不是这道题的思路,而是其中的一个算法。原创 2024-04-15 20:42:50 · 148 阅读 · 0 评论 -
通过集合判断元素是否相同
这个题可以用集合来做,集合具有互异性,只要每次给集合传入n个元素,判断其长度是否为1,即可判断这几个元素是否相同。每次从列表中给入连续的3个元素到集合中,通过集合判断元素是否相等,个人感觉这个算法挺妙的。本文完,欢迎评论区探讨。一开始是以字符串的形式输入,“,”没有什么功能,所以在判断的时候忽略掉了。最后打印的时候再添加上。原创 2024-04-18 20:37:55 · 241 阅读 · 1 评论 -
图形窗口问题求解代码
紧接着我们就要输入“点击”的信息,每次点击我们需要对窗口的顺序做一个调整,这是这道题目的关键。每次我没得到点击的信息,需要把点击的信息依次从最上层(也就是窗口数组最后一个)的窗口进行比对,若点击点在当前窗口范围内,则输出窗口编号,然后把此窗口放在最上层(数组最后一个),其他的窗口顺序依次调整,此时需要用到顺序表的相关操作。然后我们开始输入窗口的数量以及“点击”的数量,接着输入窗口的信息,这些比较好实现。窗口的编号是始终不变的,这一点首先要明确,我一开始做题以为窗口编号是随位置变化而变化的,其实这是错误的。原创 2024-04-29 20:03:27 · 300 阅读 · 0 评论 -
除留余数法创建哈希表
Hash通过把学号分段,转化成为数字,这相当于取余数,然后把对应的部分存在对应的结构体位置上,这是实现哈希的主要过程。查找的过程通过不停的判断学号位置,如果合规(在对应的学号区间)就继续找,不合规就返回0,在主函数中有判断的语句来实现。数据结构课大作业中有这么一个模块,通过学生学号创建哈希表,方便查找学生信息,那么我们就根据学生学号来创建一个哈希表。结构体是嵌套定义,按照年级,学院,班级的顺序定义,班级里面有学生指针。如果找到就输出学生信息(类的定义中实现了重载),没有找到就返回0。原创 2024-05-24 16:23:13 · 229 阅读 · 0 评论 -
Python爬取网站的子链接
在第二张图里面我们轻松地找到了计算机科学系的位置,它前面的链接即为作业的答案,所以我们只需要在利用bs生成的soup对象里面找到“计算机科学系”即可。首先导包,我们需要requests(登录网站),BeatifulSoup(解析),urljoin(其实也可以不用,用于网址连接起来)编程实现:利用requests爬虫库和beautifulsoup4解析库实现指定网站文章标题和对应网址爬取。编程实现爬取"计算机科学系"在"信息学院"主页上的网址。其次我们准备好url,就是华中农业大学信息学院网址。原创 2024-05-23 15:41:25 · 173 阅读 · 1 评论 -
作业题解-csp202203-1未初始化警告
先来翻译一下题面,其实这道题就是让我们统计一下右边的值是否在前面的左值出现过,如果右边值是0,就算是常数,也算是初始化的。那么我们可以开个布尔数组,来存储每个下标是否作为左值出现过,当输入的右值在布尔数组中作为下标,其值若为false,则说明没有出现过,则计数器cnt自增,反之不自增。基本逻辑就是这样,代码见下。原创 2024-09-12 17:11:11 · 134 阅读 · 0 评论