- 博客(35)
- 收藏
- 关注
原创 2328. 网格图中递增路径的数目 2001 关于灵神解法的消化
这是一行lambda表达式,auto说明能自动识别这个函数返回的任意值,[&]表示捕获外部的所有变量,this表示调用自身,在cpp20后才有这个功能,其他就是正常的函数调用了。很显然这是一个dp问题,然而dp的状态转移过程如何设置,对于我来说较难观察。而且常量数组一般不能使用vector,因为vector的大小在程序运行时才可以确定,不符合常量不可变性质。因为我写cpp还是不太熟练,所以顺便学习学习cpp函数调用的语法。这一状态,这样很容易就联想到记忆化递归,而递归的终止条件当然是。
2025-10-04 21:24:44
191
原创 关于力扣2025.10.4每日 11.盛最多雨水的容器
这种写法是一种三元运算符。当True选择前面 ,False选择后面。这样写能减少码量,使代码更加简洁,而功能与if else等效。我的理解是先放指针,再尝试移动左右指针,若全部移动都不更优,那么更新就不更新同侧了。最主要的观察是 ,左右两个柱子中较矮的柱子决定了异侧柱子构成面积的上限。双指针写法的本质是排除必然不更优,而如何观察出必然不更优?故此时r便无需移动,l右移即可,反之同理。时间复杂度O(n),空间复杂度O(1)学习了灵神的写法,用了一种。python代码如下。
2025-10-04 20:34:22
185
原创 关于力扣42 接雨水 灵神单调栈写法的理解
的一个完整的雨水容器,即可加入答案求解。而非严格单调递减栈显然会多一些容量为0的计算。而整个数组都会被遍历一遍,易知当一个数右边有比他大的数的时候,他必然会被撞击,而。右边的元素第一个大于他本身的,这样三个元素就成了一个相对于。保证了他左边有比他更大的元素,故所有答案都会加入ans。为啥要维护一个严格单调递减栈?右边第一个小于他本身的,而栈中。
2025-10-03 11:32:29
139
原创 对于力扣2021数组的三角和的解题思路分析2.0(合数的逆元,欧拉定理和质因数分解第一部分
而本题为了满足欧拉定理a与b互质的条件,对b进行质因数拆分,即10被拆分为了2和5。先不论大数运算给时间复杂度的增幅,就从直接调用Math.comb函数,时间复杂度为。而显然不是质数,对于合数,便进入了我们这题最精彩的部分,合数的模运算。易知,大数运算的时间复杂度超过O(1),若这样写(粘贴的灵神的代码。(直观理解是质数与任何非他自身的数互质,注意1也与num互质)欧拉函数是指小于num的数中与num互质的数的数量。所以我们考虑预处理组合数的模数,使复杂度降低。什么是欧拉定理,也就是在a和b互质的前提下。
2025-10-02 23:30:58
575
原创 关于力扣2021 数组的三角和组合数学解法的分析1.0(基本思考
形象化地理解的话,也就是第i个数,他要达到最后一层,那么他必然要左移i步,而有。,那么要到达最后一行,他有多种路径可以选择。和组织形式(画的有点丑 见谅。
2025-10-01 23:22:03
500
原创 关于vp力扣周赛469的收货
对于第二题,我的思路是先找到上升序列的尾巴,然后判断下降序列。判断符合题目条件,即可在上升序列的尾巴左右横跳,从而得到答案。然而,假如上升序列的尾巴是整个序列的尾巴,则只能将尾巴作为下降序列的头。假如上升序列尾巴是第一个元素,则放弃左右横跳步骤。然后对于每一次递推,把数组累加计算前后缀和后copy即可。对于第一题,因题目描述不清而花费了大量时间。收货:注意edge case。对于第三题 dp是一生之敌。
2025-09-29 15:52:26
191
原创 2025 9 29关于力扣每日的刷后感
我用瞪眼法穷思竭虑观察出三角形的构造符合, 不断移除顶点, 并把顶点与相邻两点加入答案的特点。后看灵神题解,为区间dp,枚举三角形底边,并用顶点分割区间。然后,值得强调的是,区间只有两点,即可返回答案,不可再分。故我思考出回溯写法。
2025-09-29 15:44:28
284
原创 洛谷 P1004 [NOIP 2000 提高组] 方格取数 的学习
1.两次走路可以在一次dp中运行,因为在相同步数和时不相遇,从此再不相遇。粗略分析一下,发现第二次走路需要记录第一次走路的状态。2.输入是给的指定位置和指定位置的值,需要擦亮眼睛仔细读题。初识这道题,感觉题目意思不甚清晰。不积跬步 无以至千里。吐槽一句:洛谷好难!
2025-09-25 23:08:36
98
原创 是时候学学滚动数组了
可以用滚动和数组写法 fa0,fb0 表示待转状态,fa1,fb1表示原位状态,fa2,fb2表示答案状态,因为答案状态产生了最大值,所以以后的原位状态就是答案状态,以后的待转状态就是原位状态。滚动数组就是用变量表示状态,并开始递推。对于力扣2024.11.1 的每日一题。先粘贴上别人的代码。
2024-11-01 14:27:13
260
原创 今天做了道蓝桥的k倍区间 ,用了二分,前缀和和哈希表
整体思路是 ,因为如果两组前缀和对k的余数相同,那么这两组数做差(中间区间的数之和)就是k的倍数,然后因为要这个区间的和是k的非负整数倍,所以需要对相同余数的前缀和进行排序(用哈希表进行组织),二分查找第一个大于当前前缀和的前缀和,将前面的前缀和的数量计入答案。第二个细节是,我们需要得到的是最大的小于等于pre的前缀和,所以用bisect_right来求出第一个大于pre的位置,这样前一个位置就是我们要找的位置。自己没写出来,按照LIS优化了一篇大佬的题解。
2024-10-31 13:53:14
191
原创 今天做了一道BFS
BFS的步数问题,尽量以字符串的形式处理变量,然后数据结构用双端队列。他先把所有的出口都标记了,加入了双端队列里面,然后一个一个地BFS。还没做过BFS,今天做了一道跳蚂蚱问题。这个代码是灵神写的。
2024-10-28 14:10:47
248
原创 2024.10.21 每日一题题目看错了
最小差值,所有下标都要处理,全增不变,全减不变,小增大减,每一个中间下标都是小的分界,然后ans的初始值是max(nums)- min(nums),还是不排除中间值改变后会出现极值增大的情况。
2024-10-21 17:40:50
240
原创 关于力扣周赛的总结
第二题,想清楚while代表什么,然后想出while后代表什么(一般是题设条件恰好不成立)。然后想清楚left能不能单向移动。第三题,从(确定)向(不确定)贪心,附上欧拉筛。
2024-10-20 19:11:37
169
原创 关于力扣2024.10.18每一题后感
先后等效性是顺序遍历翻转的前提,而每一个位置的数字在遍历到的时候只有一次机会翻转,所以他是0便一定要翻转,不管后面是什么,如果处理一遍后,最后两个都是1,则满足题设条件。如果不满足,若回溯向前翻转,则相当于第一次翻转时在若干回溯翻转位置翻转了1次,若第一次在对应位置翻转过一次,再翻转一次则必然会导致有新的0出现,若第一次在对应位置没有翻转,再翻转一次会导致把1翻转成0,故回溯一定不符合条件。不能回溯,就必然有0产生,所以最后两个数字决定了该数组是否能翻转至满足题设条件。
2024-10-18 13:11:44
180
原创 关于2024.10.17每日一题后感
这里的边界处理很关键,sum(dfs(i-1,j-k) for k in range(min(i,j)+1))%MOD,当没有逆序数对数目限制时,从dfs(i)转移到dfs(i-1)时,需要把0...i排列所组成的逆序数对数目 减去第i位因为小于左边的数而构成的逆序数 而这个逆序数在0(也就是第i位恰好取了i)到min(i(构成的逆序数不超过他前面的i个数的个数),j(j-k不能为负,也就是dfs(i-1)的j大于等于0 ,这个很容易理解))之间。如果不能满足的枝叶,返回0减去即可。
2024-10-17 18:29:42
324
原创 关于力扣2024.10.16每日一题的思考
这是我第一次写的垃圾代码,因为remove方法的时间复杂度是O(n),然后while循环n//2次,时间复杂度O(n^2),空间复杂度是O(n),因为开辟了一个averages的空间。利用了堆排序降低时间复杂度,比从代码运行效果来看,速度比灵神的代码更快。在nums 被sort()之后,nums[i] 和 nums[-1-i] for i in range(len(nums)//2)就是每次取到的最大最小值。然后看了灵神的代码,发现了一种不用remove的解法。所以我参照灵神的代码对我的代码进行了优化。
2024-10-16 11:07:32
232
原创 关于力扣2024,10.14每日一题的思考
如果n小于算出的最大楼层数,且n不属于计算过程中的扔鸡蛋楼层,那么先按照计算过程扔鸡蛋,如果扔到在(计算固定x能得到的最大n过程中)最大小于n的扔鸡蛋楼层,然后在该楼层一直向上扔就够了,这时次数会有剩余,因为最小大于n的扔鸡蛋楼层已经确定不是f(因为他不存在),无需在那里扔一个鸡蛋破裂来判断f属于(最大小于n的扔鸡蛋楼层-1)和(最小大于n的扔鸡蛋楼层-1)的区间。保证每一次扔鸡蛋 ,剩余的鸡蛋能填补此次和前一次扔鸡蛋楼层所有f的可能就能满足条件,如果第一次扔鸡蛋,那么前一次默认为0。
2024-10-14 13:43:34
146
原创 今天力扣的每日做出来了2024.10.12
他用vis来储存被遍历过的数字,具体方式是vis |= 1<<x,也就是将对应的二进制数位修改为1,然后如果vis >>x &1==1 ,也就是如果vis在对应位为1 ,对应的就是vis在该位有值,就进行ans的位运算,最后返回值。因为当时没有想到ans 初始化为0 后第一个被记录的值为被以他本身的值保存,所以我用了一个youzhi= False表示没有任何值,后面出现了第一个符合条件的数值时,就将youzhi改为True。空间复杂度,灵神是O(1),我因为有个cnt,空间复杂度是O(N)。
2024-10-12 12:33:09
202
原创 2024.10.10 今天力扣的每日一题太简单了 做了进阶版 没刷出来
ans += s*cnt,代表了ans 就加上了nums2中对应元素所有能整除nums1的元素的个数和他自身个数的乘积。至于第二种方法m+n+(U/k)*logm的时间复杂度的分析,m是指Counter(nums1),n是指Counter(nums2),而(U/k)是对应的代码中的u,然后logm就是最坏的情况下调和级数时间复杂度计算公式算出来的了。任何数的能被整除的因子关于sqrt(num)+1都是对称分布,所以找到一个不是堆成中心的数就可以加2,而找到一个是对称中心的数,就加一。先粘贴灵神的方法一。
2024-10-10 13:25:00
365
原创 今天的每日一题太难了,刷了道力扣316.去除重复字母
后面的乱序也变为有序。相邻,如果不相邻的,前面的,能变换位置的呢?就比如bcabc,当到a的时候,能否让前面不相邻的b在未来出现呢,这是不会导致字典序变小的,因为在不含重复字符的ans字符串,如果前面出现一个较大的字符,后面的字符再小,也会导致字典序的升高,因此,在这时,c的位置越靠后面越好,也就是,即使过去的不相邻的字符比现在的字符小,但因为不能把相邻的比现在字符大的字符移到前面去,所以也不能替换。如此循环,就能使现在的字符的相邻的,前面的,在字符串中能变换位置的字符全部都转换到使答案字典序更小的位置。
2024-10-09 12:14:31
232
原创 做力扣2024.10.8后感
因为确定有且只有一个目的地,随便选择一个出发点,再深度优先搜素就好。但是,要注意递归返回值要用一个参数作为媒介,不然容易返回 None。今天的每日,我用dfs做出来了。
2024-10-08 13:07:29
193
原创 关于力扣2024.10.7日每日一题后感
用cur_fuel记录现在的油量,在while循环中,先减去到下一站,也就是遍历到的当前站的油量,如果fuel_heap中有值,就pop掉里面的最小值,在用cur_fuel减去这个值,也就是模拟加油(因为fuel在入堆时是添加了负号,所以减即是加,出堆的其实是里面最大值 的负数)。在上述处理完之后,再将当前的-fuel入堆,这样才能模拟后续先走路后加油的情况,这是根据实际情况写出来的。假如一番出堆操作后仍然无力回天,也就是cur_fuel还是<0,那也只能返回-1了。今天我没做出来,先粘贴上灵神代码。
2024-10-07 11:03:53
239
原创 做力扣2024.10.5每日一题后感
down下界表示最小的时间,也就是假如全部公交车都是最小耗时者,他们一起走行程,得到的最小时间,我之前就是没有除以n,导致下界没处理好,debug了一下,然后就可以了。初始left是一定要使check False的,因为根据我对二分的理解,开区间二分left是要在right的左边结束,left 是False,right是True,能满足一种稳定的状态。Up上界表示最大的时间,这个最大的时间一定是要能满足check的,所以我就向大的取,假如每个车就用最大的时间跑行程,还加上一,这个范围显然 是大的了。
2024-10-05 10:39:14
403
原创 做力扣2024.10.4 每日一题后感
3.能多讨论几次后用f(n) = 1/n+1/n*(f(n-1 ) + ···+ f(2))来递推出通项公式,因为第一个人在最后一个位置一定不会让最后一个人在他的位置,所以不考虑f(1)的情况。我想到的点:1.将1/n也就是当第一个人就坐在自己的座位上面单独计算。震惊,原来力扣的每日一题也会让我算概率,在苦苦思索近1个小时后,我没想到的点:2.将第一个人可能选择的每个位置分1/n来讨论。思路也不能完全模拟后面的人尽量选择自己原来的位置的情况。也看了灵神的推导过程。
2024-10-04 16:37:07
233
原创 观螺旋矩阵模拟法后感
这是力扣的官方题解,把顺时针旋转模拟成了在[0,1],[1,0],[0,-1],[-1,0]间加一,实在太巧妙了,而且越界的判定写的十分清晰,实名佩服。
2024-10-03 10:58:20
227
原创 今天的每日一题太难了 做了道矩阵置零
将每一行的元素加入行集合中,将每一列的元素加入列集合中,在遍历到元素所在行集合或者列集合中有0时,将其改为False,再遍历一次,将False改为0 ,就绕开非初始化0 的重复判断。他只在集合中记录了应该变成集合的行和应该变成集合的列,在遍历到相应行列时就改元素为0,佩服。
2024-10-03 10:29:55
187
原创 关于哈希字典和哈希集合的去重方式的理解
很明显,当遇到字典的键冲突时,字典的值会放在与键对应的位置的列表里面而发生列表值的修改,而对于集合冲突的值放在列表的相同位置而不会被储存记录。但是目测是不可能的,因为键是已知,而值是未知,已知能用来找未知,但是未知就只能储存在列表里面了。思考一下,是否能对字典的值进行类似于键的线性搜索或者开放寻址的改造。先粘贴一段哈希字典的代码。
2024-10-02 19:06:42
499
原创 关于力扣2024.10.1每日一题的复盘
return dfs(last_day) 作者:灵茶山艾府 链接:https://leetcode.cn/problems/minimum-cost-for-tickets/solutions/2936177/jiao-ni-yi-bu-bu-si-kao-dpcong-ji-yi-hua-tkw4/ 来源:力扣(LeetCode) 著作权归作者所有。f[i] = min(f[i-7] + costs[1],f[i-1] + costs[0])而不把30考虑其中。来源:力扣(LeetCode)
2024-10-01 11:23:42
398
原创 关于力扣2024.9.30力扣每日一题的复盘
reserve暴力搜索能找到的最小的为0的数位,返回数位+ 1,然后再将该座位更改为1。空位中的最小并吐出,如果没有空位,就把self.seats+1并返回self.seats(表示在座位的末尾多加一个座位),方法还是比较巧妙,因为只维护了空位,而不用对所有座位进行处理。灵神方法二,建立了一个self.seats进行优化,如果self.availale中有座位(表示有空位),就返回。灵神方法一用了小根堆这一数据结构,符合不断搜索最小座位的特性,对此思考:如果搜索数组最大,那就用大根堆?
2024-09-30 11:58:59
177
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人