
力扣
鱼塘的鱼呢
这个作者很懒,什么都没留下…
展开
-
力扣题库刷题笔记75--颜色分类
备注第10行代码在本地可以跑过,但是力扣跑不过,所以就用了第10-16行代码进行替换。第一种思路是取巧,通过计数0、1、2的个数,去替换nums。原创 2023-07-25 10:36:56 · 454 阅读 · 1 评论 -
力扣题库刷题笔记31--下一个排列
c、第二次循环,依旧从右往左进行遍历,找到第一个大于nums[i-1]的nums[j]。换句说法,nums[j]就是nums[i:]中最小的大于nums[i-1]的值。b、第一次循环,是从右到左进行遍历,找到第一个降序排列的的元素,也就是当出现nums[i-1] > nums[i]的时候,nums[i-1]就是我们要找的值。前几次提交错误,主要是在上面截图第19行代码,原先写的是Nums = nums[:i] + temp,然后本地一直能跑过,这里不做多赘述。d、交换nums[i-1]和nums[j]原创 2023-07-06 17:02:14 · 456 阅读 · 0 评论 -
力扣题库刷题笔记18--四数之和
if nums[a] + nums[b] + nums[count-1] + nums[count-2] < target:#原理和第11行代码一致,注释在第8行。if nums[a] + nums[b] + nums[b+1] + nums[b+2] > target:#原理和第9行代码一致,注释在第8行。if b > a+1 and nums[b-1] == nums[b]: #去重,原理和第7行一致。首先看到这题就会想到两种方式,一是四层循环暴力破解,二就是基于前面的三数之和外面加加一层嵌套。原创 2023-06-27 16:53:26 · 355 阅读 · 0 评论 -
力扣题库刷题笔记17--电话号码的字母组合
其次,个人的思路是,先读取字符串第一个字符(digits[0]),遍历digits[0] 在字典中对应的值并加入数组res,然后在遍历digits[1:]的数组时候跟第一次遍历是有区别的。2、digits[1]也就是3,3在电话号码里面对应“def”,这个时候是res里面的每个元素都需要和def的每个字符进行拼接(换句话说,就是a分别和d、e、f拼接、b分别和d、e、f拼接,c分别和d、e、f拼接),最后加入到res里面。3、digits[2]、digits[3]的实现方式也跟第二条保持一致。原创 2023-06-27 09:11:07 · 247 阅读 · 2 评论 -
力扣题库刷题笔记16--最接近的三数之和
res = [] #当temp为较小值时,更新res中的元素,当循环完成后,res中的三个数之和就与target最接近。temp = float('inf') #临时变量,用于保存子数组之和与target的差值,取差值最小值就是本题的最接近的和。#先判断三数之和与target差值的绝对值是否小于temp,如果小于temp,则更新temp和res。#先判断三数之和与target差值的绝对值等于temp,退出循环。原创 2023-06-26 17:58:18 · 337 阅读 · 0 评论 -
力扣题库刷题笔记14--最长公共前缀
举例strs = ["flow","flower","flowe"],temp = “flow”,第一次循环的时候,由于str[0][0]、str[0][1]、str[0][2]都是f,所以count=3,由于len(strs)=3,所以f是公共前缀。举例 strs = ["dog","racecar","car"],选择用dog来被比较,也就是依次去d、o、g与第二个字符串的r、a、c、第三个字符串的c、a、r进行比较,所以这里的外循环次数实际就是dog的长度--3。4、注意strs为空的情况。原创 2023-06-26 11:39:44 · 442 阅读 · 0 评论 -
力扣题库刷题笔记13--罗马数字转整数
以上的思路,主要是声明一个列表temp,然后遍历字符串s,找到字符串中所有字符在字典中所对应的值,将值加入列表temp。这里有一个点在于,如果是“IV”、“IX”这种字符串,生成的列表会分别是[1,5]、[1,10],这里分别对应4和9,也可以理解为-1+5,-1+10.所以当列表temp中的元素小于后面的元素时,应该是减去当前元素,再加上后面的元素,就可以达成一样的效果。以上的主要思路在于,不再是将类似IV转换成IIII,而是因为其升序,先减再加是一样的效果。原创 2023-06-25 15:58:32 · 385 阅读 · 0 评论 -
力扣题库刷题笔记12--整数转罗马数字
与题解的差异主要在字典的设计以及题解第22行取余赋值的代码实现(个人是使用转换成字符串,然后根据位数确定对应字符,相对来讲笨比了许多)原创 2023-06-25 11:49:35 · 176 阅读 · 0 评论 -
力扣题库刷题笔记8--字符串转换正数(atoi)
而且个人习惯极其不好,没有输入各种可能的输入进行调试,而是直接提交代码,这样的话,其实在考试的时候很难去发现是哪里出了问题。for i in temp: #遍历字符串s,如果字符为数字,则拼接到res_temp,反之,退出循环。res_temp = "" #临时变量,将字符串中的数字加入该变量,最后赋值给输出。#判断第一个字符是否为正负号,如果是,将第一个字符赋值给flag,并在s中删除第一个字符。原创 2023-06-25 09:38:22 · 359 阅读 · 0 评论 -
力扣题库刷题笔记9--回文数
1、题目如下:2、个人Python代码实现:代码如下:原创 2023-06-16 00:25:32 · 196 阅读 · 0 评论 -
力扣题库刷题笔记6--N字型变换
换种说法就是,外部循环次数为numRows,内部循环通过字符下标去判断循环次数,这里经过过观察,每一次内部循环次数其实是math.ceil(len(s) / 2* (nowRows - 1)),如果这里次数不理解,可以参照上表字符A到字符E是第一次循环,字符B到字符G代表第二次循环(如果有小伙伴表示这个循环的方式和表中的背景颜色不同,也可以理解成T-Y是第一次,V-Z是第二次)由于个人确实不擅长生成二维数组类似的操作,所以换个思路,采用循环的方式,也就是最初思路中生成的字符串个数,转换成循环次数即可。原创 2023-06-16 00:22:10 · 1145 阅读 · 0 评论 -
力扣题库刷题笔记7--正数反转
return out_put if abs(out_put) < pow(2, 31) else 0 #当out_put大于64位时,输出0,否则输出out_put。out_put = int(str(abs(x))[::-1]) * (-1) #当x为负数,将x取绝对值,然后逆序,再加上符号。if x == abs(x): #当x为正数,将x逆序取整。原创 2023-06-15 00:40:03 · 159 阅读 · 0 评论 -
力扣题库刷题笔记5--最长回文子串
第一次while循环,是从a开始,依次判断a、ab、abc、abcd是否为回文字符串,在内循环中temp的值也依次为a、ab、abc、abcd,下同;#外循环while用于判断字符串s中是否含有字符,当每一次内循环结束以后,删除字符串s的第1个字符,开始下一次内循环。#内循环for用于记录从当前下标(此处下标可以理解为初始值为0,每一次外循环后下标+1)开始后的可能存在的回文子串。#第二次while循环,是从b开始,依次判断b、bc、bcd是否为回文字符串,以此类推,执行四次循环。原创 2023-06-15 00:20:48 · 1227 阅读 · 0 评论 -
力扣题库刷题笔记4--寻找两个正序数组的中位数
flag = len(nums) % 2 #判断数组num长度。if flag: #如果数组长度为奇数。i = len(nums) // 2 #获得中位数下标。nums.sort() #数组升序排序。nums = nums1 + nums2 #合并数组。原创 2023-06-14 00:23:36 · 1073 阅读 · 0 评论 -
力扣题库刷题笔记3--无重复字符的最长子串
if len(temp) > len(out_put): #如果temp字符串长度大于out_put,则将temp赋值给out_put。if i in temp: #如果字符i在temp中,则将temp进行切片到不包含i。temp += i #将当前遍历的字符i加入字符串temp中。out_put = "" #输出,值为当前最长连续不重复子串。原创 2023-06-14 00:08:32 · 977 阅读 · 0 评论 -
力扣题库刷题笔记735-行星碰撞
个人代码思路,主要是新建一个列表stack,将原列表asteroids中的元素依次加入到stack中。elif flag1 == 0: #当stack最后一个元素为负数时,asteroids中的元素直接加入stack中,并唉asteroids中删除他。if stack[-1] + asteroids[i] > 0: #如果stack最后一个元素和asteroids第一个元素相加为正数,在asteroids中删除第一个元素。原创 2023-05-09 18:00:40 · 651 阅读 · 0 评论 -
力扣题库刷题笔记704-二分查找
1、题目如下:2、个人Python代码如下:个人代码如下:left = 0return midreturn -1。原创 2023-05-05 22:33:50 · 746 阅读 · 0 评论 -
力扣题库刷题笔记682-棒球比赛
elif operations[i] == 'D': #如果元素为D,将当前元素赋值为前一个元素的2倍,并从当前元素的下一个元素继续遍历。elif operations[i] == '+': #如果元素为+,将当前元素赋值为前两个元素之和,并从当前元素的下一个元素继续遍历。else: #如果元素为数字,转换成整型。原创 2023-05-05 22:12:58 · 816 阅读 · 0 评论 -
力扣题库刷题笔记647-回文子串
d、然后确定终止下标,终止下标用第2个for循环,用i+j作为终止下标进行切片。最后,由于i+j的最大值一定是字符串长度+1(原因见b,这样才能使得在每一次外循环的最后一次循环,切片为s[i:len(s)+1],也就是等价于s[i:])。b、首先需要知道的是字符串s,s[i,j],指的是从下标i开始,到下标s[j-1]为止。if s[i:i+j] == s[i:i+j][::-1]: #当切片字符串与其逆序的字符串相同时,就是回文字符串,此时ans+1。3、知识点:字符串逆序。原创 2023-05-05 20:23:56 · 808 阅读 · 0 评论 -
力扣题库刷题笔记646-最长数对链
本题算是到目前为止,代码能读懂,但是思路并不能完全理解的代码(大概能理解,但是无法完全描述,不看题解不能做出),涉及到贪心和排序。先记录,后续希望能理解一二。原创 2023-05-04 22:02:39 · 125 阅读 · 0 评论 -
力扣题库刷题笔记581-最短无序连续子数组
a、输入仅存在两种场景,数组本身是升序排列的和数组存在乱序的,存在乱序的意思就是存在驼峰元素nums[n] < nums[n-1],此时整个数组就不是纯粹升序的。以上代码,如果感觉在if条件里面少判断了数组是否升序的话,是由于在声明ans的时候默认数组时升序,所以初始化为0。浅看题解,解题思路和本人接替思路一毛一样,奈何没有想到用双指针,在代码实现上也存在问题。#当左指针相等时,左指针右移一位。#当右指针相等时,右指针左移一位。#当左指针相等时,左指针右移一位。#当右指针相等时,右指针左移一位。原创 2023-05-04 08:41:36 · 268 阅读 · 0 评论 -
力扣题库刷题笔记556-下一个更大元素Ⅲ
例如9845835421,从右往左找到第一个升序的部分就是[3,5],然后寻找[5,4,2,1]比3大的值并交换元素,35421就变成了45321,然后将5321按照升序排列即可。c、再次从右往左查找第一个大于nums[i]的元素nums[j],将test[i]和nums[j]交换位置后,将nums[i:]升序排列之后即为大于之前元素的最小值。备注:nums[i]和nums[j]交换以后,实际上nums[i+1:]之后的元素均是降序排序排列的,所以转置nums[i+1:]即可。原创 2023-04-28 11:49:34 · 163 阅读 · 0 评论 -
力扣题库刷题笔记496-下一个更大元素
如果切片后得nums2存在元素大于当前元素,则赋值给num,且退出本次循环。#如果nums2中不包含或者最后一位元素为当前遍历得元素,返回-1。#如果切片后的数组不存在元素大于当前元素,则num=-1。#当前元素切片后得数组进行遍历。#初始化num = -1。#空列表用于输出结果。2、个人Python代码实现。原创 2023-04-24 17:07:02 · 839 阅读 · 0 评论 -
力扣题库刷题笔记406-根据身高重建队列
通过遍历,求得people[0][0]到people[i-1][0]大于people[i][0]的元素个数,并负责给total。while time < len(people): #外部循环,每次从people[0]开始遍历所有元素。#如果没有交换元素,则循环次数+1,当循环次数等于len(people)时,代表所有元素已被遍历,退出循环。#如果本次进入循环,则需要退出内部循环,继续从people[0]开始循环。#元素左移以后,total应该-1。原创 2023-04-23 17:15:50 · 473 阅读 · 0 评论 -
力扣题库刷题笔记394-字符串解码
理解以上代码花了一段时间,按照理解基本上也能再次写出来,但是感觉过小段时间可能再写出来就有些困难了,但是还是保存自己对于这段代码的理解。c、存在多个[],且[]中间存在其他中括号时,就是最先的截图了。2、个人Python代码实现。3、题解Python代码思路。原创 2023-04-21 17:22:11 · 182 阅读 · 0 评论 -
力扣题库刷题笔记209-长度最小的子数组
未实现原因和之前很多题目一样,主要在于用例数据过大时超出时间限制。粗看了一下题解,也存在暴力破解的方法,区别在于题解不是用的切片的方式,而是遍历直接求和。因为已经不只出现一次了,这里着重强调一下,使用暴力破解的示例代码虽然翻车了,但是用指针仍然能解决,前文说的能不用切片就不用切片,但是下意识还是使用了,因为利于我自己理解,然后又又又翻车了。发现仍然会超时,然后将示例代码Ctrl+C、Ctrl+V后,示例代码(上图是自己写的,非示例代码)仍然超时,估计是用例有变化。2、Python代码个人实现(未实现)原创 2023-04-20 11:37:30 · 153 阅读 · 0 评论 -
力扣题库刷题笔记179-最大数
本体的思路主要是通过拼接字符串之后比较大小,按照个人知识储备是按照转换成字符串拼接再转换成数字比较大小。2、Python题解思路实现。原创 2023-04-19 16:36:29 · 191 阅读 · 0 评论 -
力扣题库刷题笔记153-寻找旋转排序数组中的最小值
是因为数组经过旋转后,有且只有两种方式,一是递增,例如[1,2,3,4,5],二是两段递增,例如[3,4,5,1,2],也就是说对于数组最后的元素,在他的左边一定有递增的数组。即使是[2,3,4,5,1],对于1来讲左边的[2,3,4,5]也是递增的数组。看到评论区清一色的二分法,于是想一想有没有其他的方式,这里还真有,但是跟min起始区别不大。首先是,题目中的排序方式细看和加油站的排序方式一模一样,所以使用相同的排序方式后,如果和升序排列后的数组一样,则返回第一个元素。看到这题的第一反应是用min办法。原创 2023-04-19 15:00:07 · 150 阅读 · 0 评论 -
力扣题库刷题笔记134-加油站
个人的代码逻辑其实没有问题,主要是数据量过大会超时。相较于题解的思路,差异其实在对于数组排序的地方。我的思路是循环找到起始加油站下标,然后将gas和cost重新排序;而题解的思路相同的地方在于找到下标,差异在于他没有进行数组重新排序,直接只从下标往后看,不管下标前的数据。b、如果第0个加油站的油小于到第一个加油站的油,那么从第1个加油站作为起始点。这里由于一定有解,所以只需要判断第一个加油站开始,到最后一个加油站油够用就行了,不需要再关心第0个加油站,以此类推。3、基于题解思路的个人Python代码实现。原创 2023-04-19 11:58:20 · 289 阅读 · 1 评论 -
力扣题库刷题笔记55-跳跃游戏
a、使用 enumerate生成一个索引序列,索引序列里面有当前元素的下标i,和当前元素可以跳跃的距离jump。以enumerate([a, b, c])为例,会输出[(0, a), (1, b), (2, c)]的索引序列,enumerate用法可以参考。d、使用i + jump > max_i判断:当前下标为i的元素加上跳跃距离jump是否大于最大跳跃距离max_i,2个条件都满足的话更新max_i。c、使用max_i >= i判断:前面的元素是否能跳跃到当前下标为i的元素位置。原创 2023-04-18 11:47:58 · 169 阅读 · 0 评论 -
力扣题库刷题笔记53-最大子数组和
例如[-1,-2,1,2],连续子数组[-1, -2]和为-3,加上后面的元素,和一定小于后面的元素,所以[-1, -2]不在最大子数组[1,2]中;同理,[2,-3,1,2],连续子数组[2, -3],由也不再[1,2]中间。所以当前连续子数组和小于0时,应该从后面的元素重新开始求和,也就是截图中间第9、10行代码。2、如果当前连续子数组和小于0,则意味着当前连续子数组一定不在最大值的连续子数组。1、使用temp记录当前连续子数组和,使用res记录连续子数组和的最大值。这个思路跟题库第64题最小路径和(原创 2023-04-18 11:12:53 · 85 阅读 · 0 评论 -
力扣题库刷题笔记28-找出字符串中第一个匹配项的下标
1、题目如下:2、个人Python代码实现:原创 2023-04-17 16:29:45 · 144 阅读 · 0 评论 -
力扣题库刷题笔记122-搜索旋转排序数组Ⅱ
个人是用了一个取巧的思路,即当元素升序时,一定是有收益的(换个说法,汇总每天的收益)。所以只需要依次比较列表中的元素,当元素升序时,将收益求和。原创 2023-04-17 16:20:19 · 135 阅读 · 0 评论 -
力扣题库刷题笔记121-买卖股票的最佳时机
3、个人Java代码实现。原创 2023-04-17 15:24:07 · 123 阅读 · 0 评论 -
力扣题库刷题笔记81-搜索旋转排序数组
1、题目如下:2、个人Python代码实现:几乎所有题解都是是用二分法,所以这里尝试用二分法:重新排序后:原创 2023-04-17 11:54:50 · 148 阅读 · 0 评论 -
力扣题库刷题笔记88-合并两个有序数组
2、个人Python代码实现。原创 2023-04-17 09:59:11 · 147 阅读 · 0 评论 -
力扣题库刷题笔记74-搜索二维矩阵
1、题目如下:2、个人代码实现如下:本题主要考察的是二分法,所以尝试一下使用二分法:由于基础薄弱,指针用的不熟练,时常有用例跑不过,这里看到有个思路,将二维数组转换成1维数组,没看题解再次尝试:看了题解以后,这里记录一下extend、append的区别:原创 2023-04-17 09:02:06 · 203 阅读 · 0 评论 -
力扣刷题笔记71-简化路径
这里可以注意1点,print_out使用列表的原因,是便于names里面出现..需要删除上级目录(..左边的一个元素),相较于字符串更简单。这里如果有路过二大佬还请指教一下,b/../如何使用正则表达式表达,b为一位或者多位的英文字母。原创 2023-04-14 09:44:45 · 147 阅读 · 0 评论 -
力扣题库刷题笔记64-最小路径和
c、以grid[1][1]为例,到grid[1][1]有两种路径,分别是grid[1][0] + grid[1][1]和grid[0][1] + grid[1][0],注意这里的grid[1][0]和grid[0][1]是逻辑b中计算的总步数(已标红),所以计算grid[1][1]的最小部署就是grid[1][0]和grid[0][1]的最小值再加上grid[1][1]的当前步数。同理grid[1][0]的总步数=grid[0][0] + grid[1][0]=1+1=原创 2023-04-13 17:30:11 · 697 阅读 · 0 评论 -
力扣题库刷题笔记35-搜索插入位置
1、题目如下:2、个人Python代码实现:第一次代码未通过全部用例,是忘了考虑target有可能比nums最大值更大,最终代码如下:3、个人Java代码实现:4、个人Python代码优化:在Java代码写完之后,对于Python代码做了优化 :5、二分法解答:原创 2023-04-13 09:47:54 · 130 阅读 · 0 评论