
2024年3月力扣刷题记录
文章平均质量分 58
2024年3月力扣刷题记录
Circusxxx
这个作者很懒,什么都没留下…
展开
-
2024.3.31力扣(1200-1400)刷题记录
首为偶数就向下取整;注意整数向上向下取整值相同。3.Counter函数1。老忘记有这函数,来自灵神题解(4. Counter函数2。原创 2024-03-31 23:31:18 · 382 阅读 · 0 评论 -
2024.(3.30和4.1)力扣刷题记录-二叉树学习记录2
递可以不用每次都更新v值,因为从上到下能确保最大小值就是该条路径的,而没有受其他路径影响;而归每次都需更新v值,一个节点有左右两边两条路径到达。学习一下灵神的写法,来自视频。不会,来自视频代码。不会,全都来自灵神题解(原创 2024-03-30 19:22:09 · 562 阅读 · 0 评论 -
2024.3.29力扣刷题记录(未完)
2.二分查找 + 前缀和。原创 2024-03-29 23:22:53 · 204 阅读 · 0 评论 -
2024.3.27力扣(1200-1400)刷题记录
需要注意的是,集合操作的时间复杂度通常是接近 O(1) 的,因为集合内部使用哈希表实现,能够快速进行元素的查找和插入,但在极端情况下可能会达到 O(n)(例如哈希冲突较多的情况)。海象运算符的主要作用是可以在表达式中将计算结果赋值给变量,且在同一表达式中使用这个变量。这样可以避免重复计算相同的表达式,使代码更加简洁和易读。我以为遍历时复很高,所以用的双指针。),对上述求最大小值列表部分代码进行修改。2.最小值中最大值和最大值中最小值,方法来自评论(1.遍历,时复O(n*m)。2.遍历,求最小和次小。原创 2024-03-27 23:34:11 · 450 阅读 · 0 评论 -
2024.3.(26,27号)力扣刷题记录-二叉树学习记录1
带你理解递归的本质!之前有一点这种想法,但是没有实现。只局限在了在归的时候进行操作,而没有想到在递的时候进行操作。(2)递归+全局变量(准确来说是非局部)时空复杂度均为O(n)。(2)递归+数学。(1)递归+字符串。(1)递归+非局部变量。原创 2024-03-26 21:11:30 · 386 阅读 · 0 评论 -
2024.3.25力扣(1200-1400)刷题记录
是求整数平方根(integer square root)的函数,通常用于计算一个整数的平方根并返回最大的整数部分作为结果。在某些编程语言或库中,可能提供了内置的函数来实现这一功能。整数平方根是指小于或等于给定整数的正整数平方根。例如,对于整数 16,其平方根是 4;对于整数 17,其平方根也是 4,因为整数平方根函数会返回最接近但不超过真实平方根的整数值。2.打表,方法来自灵神题解。列举出范围内的n->x的字典,再调用。分割出来的结果是含有“1”的串和空串。3.寻找“01”串。2.位掩码,来自灵神题解(原创 2024-03-25 18:07:51 · 372 阅读 · 0 评论 -
2024.3.(24,25号)力扣刷题记录-二分查找学习记录2
【搜索旋转排序数组【基础算法精讲 05】】 https://www.bilibili.com/video/BV1QK411d76w/?(1)排序,时复O(nlogn)(函数)或O(n)(遍历寻找)(2)二分查找,参考学习视频。原创 2024-03-24 22:46:01 · 359 阅读 · 0 评论 -
2024.3.22力扣(1200-1400)刷题记录
先不看绝对值,ans[i]等于ans[i-1]-nums[i-1]-nums[i]。但是由于带有绝对值,所以使用presum储存起来。而当i==0时,ans[i-1]是presum,而nums[i-1]使用pre(pre初值为0)保存,就方便了当i==0时下标超范围的情况。而presum初值为sum(nums)的原因是,减去pre和nums[0]就为ans[0]。然后在存入数组时,绝对值即可。这道题不会,来自官方题解(原创 2024-03-22 23:51:34 · 239 阅读 · 0 评论 -
2024.3.21力扣(1200-1400)刷题记录
1.打表,prime列表是静态列表,详情可见我的学习记录(3.分组求解,方法来自灵神题解(2.枚举,参考官方题解(4.巧妙解法,来自评论(原创 2024-03-21 23:27:57 · 232 阅读 · 0 评论 -
2024.3.20力扣刷题记录-字符串练习1
当字符串长为一时,无论大小写,均满足条件。如果第一个字母大写,则后面的大小写统一,即和第二个字符大小写一样;如果第一个字母小写,则后面均需小写。1.遍历,不断更新ans。(也就是横向扫描)。不会去掉其他字符,以下方法均来自官方题解(用于检查字符串是否只包含字母和数字字符。3.巧妙遍历(升级版),方法来自题解(还有看到另外的函数写法,来自题解(2.纵向扫描,代码来自官方题解。2.遍历,方法来自题解(原创 2024-03-20 21:44:46 · 312 阅读 · 0 评论 -
2024.3.19力扣(1200-1400)刷题记录
当n==0或1时,不用判断。n-(n&1)的目的是为了区分奇偶数,奇数减一,偶数不变。并且当n==2时,range(2,2,2)为空,index不会超。之前有想到边求最大小值边计数,但是由于最大小值数值在变,就放弃了,没有想到可以在最大小值发生改变时,同时将个数清为1。3.同向双指针(滑动窗口),时复O(n)。有想到使用滑动窗口,但是没写出来。下面为简便写法,但是相当于两次遍历。2.数学(真服了哈哈哈哈,还真没想到)。2.哈希表,时复O(n)。优化,来自灵神题解。1.遍历,时复O(n^3)。原创 2024-03-19 13:36:50 · 434 阅读 · 0 评论 -
2024.3.(18,23号)力扣刷题记录-二分查找学习记录1
正整数个数只用找到正整数开始的位置,其到结尾均为正整数;同理,负整数只用找到负整数结束的位置。正整数开始的位置即为大于等于1的位置,负整数结束的位置即为大于等于0的位置减一。注意:1.统一区间符号;2.大于小于等于符号及转换关系;3.注意while那里的要求是遍历完所有的元素,即闭区间为空(l==r不为空)。或使用二分查找库bisect,参考灵神题解(时复O(logn),空复O(1)。遍历时复O(n^2)。原创 2024-03-18 23:00:24 · 285 阅读 · 0 评论 -
2024.3.18力扣刷题记录
注意:可能存在没有a或没有b的情况,所以初始化aidx为-1(a未出现,b第一次出现下标为0),bidx为n(b未出现,a最后一次出现下标为n-1)。在这个例子中,我们首先将列表 `my_list` 转换为迭代器 `my_iter`,然后使用 `next()` 函数分别从迭代器中获取下一个元素。每次调用 `next()` 函数时,它会返回迭代器中的下一个元素,直到迭代器耗尽。如果不提供默认值,而迭代器耗尽时仍然调用 `next()` 函数,则会引发 `StopIteration` 异常。原创 2024-03-18 16:25:19 · 1818 阅读 · 0 评论 -
2024.3.17力扣刷题记录
坐标满足:主对角线i==j,副对角线i+j==n-1。2.不使用库函数,遍历求解。1.排序,时复O(nlogn),空复O(1)。1.库函数,学习该库函数知识推荐看文章(2.遍历,时复O(n),空复O(1)。时间复杂度均为O(n)。原创 2024-03-17 16:11:29 · 291 阅读 · 1 评论 -
2024.3.(16,17号)力扣刷题记录-滑动窗口学习记录
注意:这里的时间复杂度是O(n)的,而不是O(n^2)。因为循环次数和L,R移动的次数有关,但是L,R之间是没有关系的;L最多只移动n次,R也是。是相加的关系而不是相乘。我根据7视频的思路写的代码,居然超时了。仔细观察发现,我使用切片求和的话,每一次判断都要求一次,这样时间就长了。原创 2024-03-16 21:42:18 · 298 阅读 · 1 评论 -
2024.3.16力扣(<=1200)刷题记录
omg这个方法惊到我了,我虽然有想到和二进制有关,所以写的位运算,但是我没有想到转换为字符串。因此,这段代码的作用是计算将给定的整数转换为 0 需要的步数。步数的计算方法是将该整数转换为二进制表示,然后计算其长度加上 '1' 的个数再减去1。),空复为O(1)。这个方法很妙,博主不是没有想过原地构建,但是储存原数字成了问题,这个方法能够很妙的同时储存原数据和新数据。1.遍历,虽然返回数组不算在时复里面,但是还是感觉和时复O(1)的有区别。4.随机选择,注意时复期望为O(1),方法来自官方题解。原创 2024-03-16 20:12:28 · 327 阅读 · 1 评论 -
2024.3.(15,16号)力扣刷题记录-相向双指针练习
才反应过来,枚举最大边,就变成了a+b > target的题目了,就能使用相向双指针来达到目的。思路:将它一层一层地看,记录单层接水量然后相加。虽然我已经做了优化了,但是时复毕竟是O(n^2),又。当时我没有想到遍历大的数,就使用的同向双指针,后面看了灵神题解(),特别是优化部分很神。后面方法16号写(未完待续)相向双指针,参考灵神代码(1.分层遍历(但是超时了)原创 2024-03-15 22:26:51 · 284 阅读 · 1 评论 -
2024.3.14力扣刷题记录
这里直接令i=j-indexDifference,而没有遍历。是因为通过移动j来达到遍历i的效果,所以不用遍历,但是需要维护以达到不同i和j的组合。这个方法太妙了,时复为O(n)。因为字母一共有26个,可以使用一个32位二进制数储存,从而达到降低空间复杂度的目的。运用排序+指针,将绝对值转化为大于小于两个区间,同时算两个值,再进行比较。1.哈希数组,空间复杂度:O(∣Σ∣)(其中 Σ是字符集)。2.状态压缩,空间复杂度:O(1)。相向双指针,解法参考(学习一下灵神的方法(原创 2024-03-15 20:10:46 · 356 阅读 · 1 评论 -
2024.3.13力扣(<=1200)刷题记录
思路分析:我当时看到这道题第一反应是排序,下标即为个数。但是nums【j】要小于nums【i】(不能等于),且位置不能变,所以排序不行(感觉比较麻烦)。这是因为all 函数采用短路求值的方式,只要遇到一个元素为假,就会立即停止遍历并返回结果。所以该代码并不会比上一个代码运行时间长(是因为博主当时突然有这个疑问,所以特地去查了一下)。当括号内可迭代对象全为True时,all函数整体为True,否则为False;2.数学解法,时复O(n),参考官方题解下评论(2.遍历 统计数量,时复O(n)。原创 2024-03-13 22:55:45 · 472 阅读 · 0 评论 -
2024.3.12力扣(<=1200)刷题记录
而找公因数并不需要从1遍历到n,只需要遍历到根号n,能被整除时,除数和商均为公因数。一旦有频次相减大于0的则必有频次相减小于0的,因为所有元素总频次相等,即数组长度。另外python还可以使用Counter()函数统计词频(函数时间复杂度O(n)),是在看官方题解时看到的(另外要注意的一个点是,如果n是平方数,则会多加一次(商和除数均为根号n),所以需要判断一下。可被3整除的偶数即能被6整除的数,遍历即可。位运算的本质:每向左移动一位,即变为原来的两倍(*2)。2.遍历后比较,时复O(n)。原创 2024-03-12 20:45:55 · 476 阅读 · 1 评论 -
2024.3.11力扣(<=1200)刷题记录
组成”,那在前三个数中一定有既不最大也不最小的数。我都写三个return了都没发觉哈哈哈。,我的偶像,yyds!)的解释才知道,三个数的排序是O(1)。我在写代码的时候忽略了一个问题,就是既然题目中写道“数组由。2.遍历,时复O(n)。遍历想法参考官方题解(数均为正整数,乘积差直接两最大减去两最小即可。我当时第一反应排序,没考虑时间复杂度。1.排序,时复O(n log n)原创 2024-03-11 19:50:09 · 362 阅读 · 0 评论 -
2024.3.(9,11号)力扣刷题记录-周赛362(未完)
【矩阵快速幂优化 DP【力扣周赛 362】】 https://www.bilibili.com/video/BV1U34y1N7Pe/?参考视频代码,对两处进行修改。2.将差分数组还原成原数组的部分。使用差分数组将区间变化转化为两个点变化。原创 2024-03-09 21:27:54 · 272 阅读 · 1 评论 -
2024.3.(9,10号)力扣(<=1200)刷题记录(未完)
先假设所有的数均为不能被m整除的数,那么num1-num2就等于前n项等差数列求和。然后再遍历每一个数,一旦有能被m整除的数,ans就减去2倍i(因为num1-i,num2+i,结果就-2i)。),简直太妙了哈哈哈,记录一下。因为题目给出了范围,可以直接将情况列出来。虽然我这样用排序好像用处不太大,但是想到了就写了(不过运行速度要比直接遍历快)。bisect_left()函数时复为O(logn)。1.遍历+移动窗口(动态规划)3.特殊解法(仅针对该题)(正在学习中,10号补上)2.运用数学知识取对数。原创 2024-03-09 21:27:46 · 379 阅读 · 1 评论 -
2024.3.7力扣(<=1200)刷题记录-977. 有序数组的平方
因为剩下的数值里面是符号相同的数,从指向0的指针到另一个指针的值的绝对值必然是增加的(因为nums数组是递增的,充分利用有序性)。如若剩下的数组为【-4,-3,-2,-1,0】,此时即L指向-4,R指向0,那么从0到-4的绝对值必然是增加的。另外,博主在写代码的时候,先是将ans数组(答案数组)令为空,然后使用insert()函数在列表的头位(下标为0的位)插入的数值(要求非递减顺序),但是运行起来发现时间太慢了,所以改为了idx存需要放的下标,再赋值。原代码为注释的代码。为什么会想到使用这个方法呢?原创 2024-03-07 16:56:20 · 224 阅读 · 0 评论 -
2024.3.6力扣(<=1200)刷题记录-1450. 在既定时间做作业的学生人数
queryTime的学生集合(注意这里是小于,我们本身需要的是大于等于)。而起始时间小于等于queryTime的学生集合(lessStart集合)包含两种情况:1.结束时间小于queryTime的学生集合(即lessEnd集合);所以lessEnd集合包含于lessStart集合,且从lessStart集合中去掉lessEnd集合中的元素即是满足条件的学生集合。的第一个下标(若我们需要的元素个数为num的话,下标指到的位置及之前位置个数是num+1,但是下标还是num),而是找到。原创 2024-03-06 21:49:02 · 1956 阅读 · 2 评论 -
2024.3.5力扣(<=1200)刷题记录2
这里sort()函数时间复杂度为O(nlogn),即整体时复为O(nlogn),空复为O(1)。以上是偷懒做法(当然我暂时只会这个),正确做法应该为一次遍历,维护最大和次大值,根据官方题解。原创 2024-03-05 23:04:15 · 199 阅读 · 0 评论 -
2024.3.5力扣刷题记录-1455. 检查单词是否为句中其他单词的前缀(未完)
此处是使用数组存储字典树,此处运行时长和内存会受N的影响,但是如果N太小了又存储不下,后面会尝试更改为使用字典来存储字典树(写好了再加上)。1.解法一:循环遍历。原创 2024-03-05 23:02:04 · 383 阅读 · 0 评论 -
2024.3.5力扣(<=1200)刷题记录1
函数会对这些布尔值(0 或 1)进行求和操作。由于 True 被当作 1,False 被当作 0,所以最终的求和结果就是等于 0 的元素的个数。在 Python 中,布尔值 True 被当作整数 1,而布尔值 False 被当作整数 0。等于 0 时会返回 True(即值为 1),否则返回 False(即值为 0)。是一个生成器表达式(generator expression),它会对。,它会判断是否等于 0,返回一个布尔值(True 或 False)。四、1394.找出数组中的幸运数。原创 2024-03-05 12:19:07 · 375 阅读 · 0 评论 -
2024.3.5做题记录-力扣852. 山脉数组的峰顶索引
的解决方案”,在此处我想到了二分+指针的方法来解决这道题。但是题目要求返回索引,如何协调二分列表中的索引和返回的索引成了问题。2.在2.2代码中mid = l + r + 1 >> 1这里+1不是很理解,暂时留在这里,后面懂了再记录。1.心路历程:题目要求“你必须设计并实现时间复杂度为。此处使用首尾双指针解决索引问题。1.学习二分法、三分法+指针的用法。2.学习参考力扣作者宫水三叶代码(原创 2024-03-05 10:16:29 · 392 阅读 · 0 评论