- 博客(24)
- 收藏
- 关注
原创 LeetCode732.我的日程安排表III
首先构造一个全为0的数组,每次添加新日程的时候只需要将startTime加1和endTime减1就表示从startTime到endTime这段时间段都加上了1。一种直接的思路是建立一个空的线段,在每次添加新日程的时候[startTime, endTime)在经过的路径上加1。利用有序字典的方式,每次添加一个新日程就将startTime加上1以及endTime减去1。注意,以上的时间复杂度都是单次预定的时间复杂度,如果要计算总的时间复杂度则还需乘以k。,而且需要遍历n个数的最大值,总的时间复杂度就是。
2025-01-04 11:01:10
903
原创 LeetCode 3007.价值和小于等于K的最大数字
我们可以发现,当最高位为1也就是6这个数的最高位时,后面两位最高只能到10也就是6的后两位,也就是2,这时一共有2+1=3种可能。而当前面两位为11时,最后一位最多也只能跟6的最后一位相同,也就是0。除开这两种跟6相同的情况,其他情况例如前面两位为10时,最后一位可以是1或0;当最高位为0时,后面两位可以是00,01,10,11四种情况。可以看出有2个01,2个10,以及2个00和1个11。位及之前的数构成的二进制数比相同位置的。的奇数个数,再将这些个数乘以。后面能填的数的个数加上。考虑用一个函数来计算。
2024-08-21 12:04:59
1046
原创 LeetCode 3130.找出所有稳定的二进制数组II
大,但是由于前一项取余之后可能很小,后一项取余之后也可能很大,因此相减可能出现负数,如果不处理可能导致最终的结果为负。在对结果进行取余的时候要注意防止出现负数,因此要先加上一个。的稳定的二进制数组的数目,定义。如果不那么做,那么在。的稳定二进制数组的数目。
2024-08-07 10:13:02
801
原创 leetcode 1186.删除一次得到子数组最大和
说完了Kadane算法,我们再来看看本题,本题可以删去子数组中的一个元素或不删去。我们先考虑这样一个问题:如果将题意中的“删除一次”的约束删去,那么本题又该如何做呢?Kadane算法利用了动态规划的算法,只用遍历一遍数组即可找到子数组的最大和。,我们就可以得到子数组最大和。但是,这样做的时间复杂度是。个元素结尾的子数组的最大和。个元素结尾的而且不删去元素的子数组的最大和,以。首先,我们的直觉肯定是先用暴力,枚举每一个点。个元素结尾而且删去一个元素的子数组的最大和。的更新方式和上述Kadane算法相同,而。
2024-07-22 10:31:28
743
原创 leetcode 2959.关闭分部的可行集合数目
考虑暴力枚举每一种关闭分部的可能性,也就是枚举每一种分部开着的可能性。我们假设以二进制的1表示分部开着,0表示分部关闭。以一个十位的二进制数来表示这n个分部的开关情况。总的来说,我们先初始化已知边,由于两个点之间刚开始可能有多条边,因此我们只需要保存距离最小的边。必须要给两个方向的都赋值,因为本题是一个无向图。是否被选中,如果没有判断则可能会更新所选中分布之间的距离。最后我们需要看看被选中的分部之间的距离是不是都小于。而枚举每一种情况又需要进行一次Floyd算法,因此整体的时间复杂度是。
2024-07-20 11:26:24
662
原创 pytorch lightning只保存最新的epoch
最近在做controlnet的实验的时候要保存pytorch lightning的trainer。但是每次保存一个checkpoint就需要20G的存储空间。对于只有50G的数据盘的autodl来说显得捉襟见肘。为了节省一些存储空间,我决定只保存最新epoch的checkpoint。但是,在百度和Google上搜了一下也没有什么好的解决办法。于是,我查阅了pytorch lightning的官方文档,发现里面有这样一句话。,那不就能保存最新的epoch了嘛。于是,我想:如果我设置。
2024-07-17 11:07:28
370
原创 leetcode 3102.最小化曼哈顿距离
枚举去掉每一个点的情况,然后计算出点与点之间的距离,从中取最大值为去掉改点的最大距离,计算出每个点的情况之后再取出当中的最小值作为本题的答案。为了得到投影之后的x’和y’与原来的x和y之间的关系,我们可以用一个投影矩阵来对其进行变换。我们分别将原来x轴的差和y轴的差投影到现在的x’轴上。由于投影之后线段的长度会缩小。这个点之后的最长曼哈顿距离,再求最小即可得到答案。如图所示,假设我们有两个点,分别是。倍,而我们上面的操作又先扩大。倍,之后再将其逆时针旋转。根据切比雪夫距离的定义,我们可以构建两个有序列表。
2024-07-10 10:38:05
778
1
原创 AcWing 4262.空调
我们知道,如果要想对一个数组的某个区间进行加减操作,最方便的方法是利用差分。那么我们一个最简单的直觉就是求出所有正数的和,即为操作的次数。我们知道,每当进行一次差分操作,就必有一个差分数组的元素。所谓差分,就是利用原数组构造一个数组,使其满足。数组,并求这些操作所需要的最少操作次数。这样上面的操作就等价于求出从。粗看本题,大概意思就是让我们对。数组进行变换,让其同时减去一个。这样原问题就等价于求出对。数组所需要的最小操作数。数组所需的最小操作数了。且必有一个差分数组的元素。数组进行差分操作得到。
2024-03-08 20:55:43
1555
1
原创 AcWing 5268.最短距离
如图,1和2的距离为0,但是不属于同一类,此时就可以将这两类合并。这是因为,1和3为同一类,3到1的距离为0,那么3到2的距离就也为0。同理,2类内的每一个点到1类内的每一个点的距离也为0。如果要是两个点的距离为0,那么就说明这两个点属于同一类。假如将所有距离为0的点合并为一个集合,那么就可以用并查集处理。考虑在合并距离为0的点之后利用一次Floyd算法,计算出类与类之间的最短距离。
2023-12-04 11:45:47
81
原创 AcWing-Linux基础课-7.管道、环境变量与常用命令
当某个可执行文件同时出现在多个路径中时,会选择从左到右数第一个路径中的执行。上面的代码用于寻找当前目录下的.py文件并将其用回车分割成命令行参数,最后统计文件中的代码行数。real是真实的完成的时间,但是其中可能有一部分时间不在执行命令,可能被操作系统挂起。用于指定动态链接库(.so文件)的路径,其内容是以冒号分隔的路径列表。当我们修改动态链接库里面的内容时,不用重新编译可执行文件,方便修改。Python导入包的路径,内容是以冒号分隔的路径列表。存放Java导入类的路径,内容是以冒号分隔的路径列表。
2023-11-24 11:15:20
140
1
原创 AcWing 1264.动态求连续区间和(树状数组和线段树)
线段树是一种数据结构,它利用了二分的思想,不断地将某一个区间分成两个子区间,直到分成的子区间只有一个元素为止。而传统的前缀和思想是将所有操作执行完之后再求取某个区间的区间和。相比于传统前缀和,树状数组可以边修改数组的元素边查询区间和。而如果使用树状数组或线段树,则时间复杂度为。这里的动态指的是可以在某个位置修改元素的值。线段树可以有多种用途,它可以被用于求。,因此如果使用前缀和,则时间复杂度为。树状数组是一种数据结构,主要是为了。求取某个区间和(前缀和)。用来存储线段树的区间。的最大值,区间的和…
2023-11-20 20:36:31
91
1
原创 AcWing 1241.外卖店优先级
假如我们不每个时刻都衰减没有订单店铺,而是等到该店铺出现订单时,我们再比较他上一次拿到订单的时刻和本时刻的差距,一次性衰减两个时刻内所有没有订单的时刻。是否大于1,如果大于1,那么说明两个时刻之间出现了空,需要进行衰减。,则说明在某一时刻到T时刻之间有没有接到订单的时段,需要进行衰减。的时候都需要枚举每一个订单和店铺。由于我们只枚举每个时刻的订单,因此算法的时间复杂度为。首先用一个结构体存储每一个订单的店铺号和时刻。然后根据订单的时刻和店铺号按从小到大排序。表示第k个店铺上一次接到订单的时刻。
2023-11-17 21:27:51
59
原创 AcWing 149.荷马史诗
构成的两种哈夫曼树,可以看出,上面的哈夫曼树的权值明显大于下面的。在k进制中,如果依然按照二进制哈夫曼树的合并规则,先合并最小的k个节点,那么一直合并到了不足k个节点的时候,最后一次合并就会出现缺漏,这时的k叉哈夫曼树就不是最优哈夫曼树。为0,那么也就是说此时我每次合并的时候都能合并k个点,这个时候状态是最好的。题目中要求编码长度最短和最长的编码的长度最短,也就是要求哈夫曼树的权值之和以及最深的深度最短。而且优先队列的排序方式要按照先比较权值,权值小的排前面,权值相同的比较子树的深度。
2023-11-15 21:51:23
110
1
原创 AcWing 1214.波动数列
都有可能是负数,而数组下标只能大于等于0,因此在取模的时候要注意是结果必须大于等于0。个操作下,如何组合使得数列之和与。通过以上的分析我们可以知道,当第。时,满足题意的方案只有一种,就是。这其实是一个组合问题,在。,因此本题的时间复杂度差不多。上述左端的式子刚好为考虑。(2)关于初始化的问题,当。假设数列的第一个数为。次操作之后数列的和。
2023-11-14 20:56:34
95
原创 AcWing 1212.地宫取宝
应该比最小的宝贝的价值小,也就是比0小。这样如果下一个宝贝的价值为0的话才能取到,否则如果此时。,这样宝物的最小价值就为1,可以让0表示比最小价值还小的值。因此本题可以考虑用一个四重循环的dp解决。,那么下一个宝贝的价值如果为0就取不到。由于-1超过数组的下界,因此对于输入的。时,小明没有取任何宝物,所以此时。这个位置的宝贝和不取的选择。也要有所处理,将其范围变成。的位置,这个时候就有取。
2023-11-14 10:32:03
127
原创 AcWing 1205.买不到的数目
的形式应该相同,因此变形一下就是。每增加1,结果都会增加3。大,那么说明这个数就可以被。,那么一个数只要它不能被。组合而成,因此就没有解。每增加1,结果都会增加2。因此得出规律,结果应该是。,带入一下数字可以求得。整除,那么它就不能被。
2023-11-12 10:42:23
74
1
原创 AcWing 5271易变数
假设一个二进制数1101,我们可以从它的最高位开始枚举,假如当前位为1,那么这一位就有两种可能,如果为0,就只有1种可能。存储当前这一位之前的所有1的个数,枚举后面所有可能填数的情况,这个时候我们之前算的组合数就用上了。的时候,因为只有1操作0次为1,而且不管n输入多少,区间总会包含1,因此直接输出1即可。假如当前位为1且我们枚举的时候让其为0,那么后面的数我们就可以随便填而不会超过。表示可以随便填的位数,那么整个数的1的个数就是。表示后面可以随便填的数中1的个数,的二进制数中1的个数。
2023-11-08 21:35:21
64
1
原创 AcWing-Linux基础课-5.git
我们每次的改动会由工作区传给暂存区,当我们想创建一个新版本时就由暂存区移至版本库。每次创建完一个版本之后head节点就后移,并且将新版本插入版本结构。我们之前已经在本地创建了一个project项目了,所以点取消。添加完之后可以在隐藏目录下看到.gitconfig文件。首先添加自己在ACgit上注册的用户名和邮箱。打开之后可以看到刚刚添加的用户名和邮箱。创建一个ACgit用户,并打开我的项目。接下来创建一个新的项目project。查看当前文件和暂存区的文件的区别。添加完成之后打开刚才创建的项目。
2023-11-01 17:39:41
545
1
原创 AcWing-Linux基础课-4.ssh
配置完免密登录后,输入如下代码即可在服务器执行命令。在config文件写入如下内容。创建config文件。
2023-10-31 17:05:18
228
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人