- 博客(24)
- 收藏
- 关注
原创 代码随想录算法训练营第三十二天 | 动态规划、LeetCode509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
公式为在两种爬法里选出总cost最小的,每一种的cost = dp[i-1] + cost[i-1] / dp[i-2] + cost[i-2]。3.初始化,因为初始情况是从1/2层起步,意味着初始可以直接站在1/2层,所以爬到1/2层的最小花费,dp[0]=dp[1]=0;第一步,dp[i]是第i个数的值,第二步公式已给出,第三步初始化也已给出,dp[0]=0,dp[1]=1,第四步显然是从前往后遍历,第五步举例,0+1=1,1+1=2,1+2=3,2+3=5。个台阶向上爬需要支付的费用。
2025-03-07 08:24:52
487
原创 代码随想录算法训练营第二十六天 | 贪心算法、LeetCode455分发饼干、376摆动序列、53最大子序列和
到波峰/波谷的时候进行计数,单调区间中间的数不用计,波峰波谷前的一个数对波峰波谷后的一个数的判断无意义只有副作用。每次循环,最大值只有可能是三种情况:一是之前的最大值,二是该数+之前从一个正数开始和一直是正数的序列到该数之前,三是该数。这个四步其实过于理论化了,我们平时在做贪心类的题目时,如果按照这四步去思考,真是有点“鸡肋”。不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。做题的时候,只要想清楚 局部最优 是什么,如果推导出全局最优,其实就够了。
2025-02-28 08:31:51
496
原创 代码随想录算法训练营第二十五天 | 回溯算法,LeetCode491递增子序列、46全排列、47全排列ⅱ、332重新安排行程、51N皇后、37解数独
如果后续找不到新成为start的地址对应的航线,回溯,将之前移除的list在原位置补上,start还原,重新该层的搜寻。比如1123,可以看作第一个1,第二个1和23,或者第二个1,第一个1和23,这两种是重复的,那么只要在第一层也就是第一个位置设一个重复数组,记录数字1在该位置上出现过,再遇到相同数字就跳过即可。确定第一个位置的数后,第二个位置的数就是除开第一个数以外的所有数都有可能,这就很容易想到使用used数组,只要不是使用过的元素,在该层,也就是某个位置都可以放置。有一部分思路是一样的,再看看。
2025-02-28 06:30:29
869
原创 代码随想录算法训练营第二十四天 | 回溯算法,LeetCode93复原IP地址、78子集、90子集ⅱ
另外的条件是i不等于startIndex,因为i是会++的,若等于则说明是第一次在这一层访问到这里,确保了前面该子集前面的内容是独一无二的,若不等于,结合前一个条件,不能确保子集前面内容的独一性。判断是否合法,就是看是否0开头且不仅为0,或者数值大于255,接下来拼接,递归,注意i是这一次的结尾也是下一次的开始,所以递归传入的startIndex为i+1(好像基本都是i+1).像组合、切割、子集都是从startIndex开始的,但后面的排列问题则要从0开始,因为顺序不一样对于组合来说是有意义的。
2025-02-24 01:51:25
427
原创 代码随想录算法训练营第二十三天 | 回溯算法,LeetCode39组合总和、40组合总和ⅱ、131分割回文串
费了挺多时间,以abcd为例,几个纠结的点:1、循环条件,应该是第一层分别取1234个字母,第二层分别对应123,12,1,0个字母,第三层12,1,0,0以此类推。大体思路和前一道一致,区别在于某一个数不能重复取得时,startIndex要+1,并且由于可能存在几个相同的数,于是排完序后它们会紧挨在一起,虽说一个组内可以有一样的数,但是不能有一样的组,也就是说前一个a成立的组很可能也存在相同的b成立的组,当a=b时。如果至少一个数字的被选数量不同,则两种组合是不同的。,例如77.组合、216组合总和ⅲ,
2025-02-23 15:50:42
536
原创 代码随想录算法训练营第二十二天 | 回溯算法,LeetCode77组合、216组合总和ⅲ、17电话号码的字母组合
注意for循环的条件中采用了剪枝操作,因为k-path.size()是现在还需要加入的数量,那么n-(k-path.size())+1就是最大的起始点,+1是因为目标范围是[1,n],不是数组从0开始而是从1开始的。for循环处理宽度,这道题的宽度根据数字的不同,7,9宽度为4其他都为3,每一层就是每个按键对应的字母。3、子集问题,1234,有1,2,3,4,123等子集;for循环单层逻辑(本层集合中所有元素,节点孩子数量),处理节点,递归调用,回溯,return。的字符串,返回所有它能表示的字母组合。
2025-02-23 04:56:57
944
原创 代码随想录算法训练营第十七天 | LeetCode654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
对于9来说,他作为7的右孩子必须大于父节点7且小于最大值(max_value),而他的左孩子8必须小于他的父节点9且大于父节点可能的最小值7,7也是父节点9的父节点。感觉来说好是两个都为null,但还是严格按照构造子树的方面想,如果两个为空那就是叶子,如果都不为空就传入下层继续,如果一个为空,那么直接返回另一个即可,这点比较重要,因为分别判断返回另一个的写法,同时保证了叶子节点的情况,返回另一个也为null,正好就是叶子。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;
2025-02-14 15:58:23
892
原创 代码随想录算法训练营第十六天 | LeetCode513找树左下角的值、112路经总和、113路径总和ⅱ、106从中序与后序遍历序列构造二叉树、105从前序与中序遍历序列构造二叉树
层序自带层次判断,只需要在最深层记录结果就可以,最左边可以通过迭代/递归的顺序指定,迭代法就是每一层的第一个i=0的时候记录,每一层记一次,后面的会覆盖前面的;注意找到最后路径后的add语句,需要new一个list,把path里的数据传进去,再把这个list加入res中,如果直接加入path的话因为是一个引用,后续回溯的话会修改已经存入的path,必须这样写。本来以为和前面的路径和差不多,但是这里的数据结构变成了List就有所不同,必须要回溯。的路径,这条路径上所有节点值相加等于目标和。
2025-02-13 17:19:34
361
原创 代码随想录算法训练营第十五天 | LeetCode110平衡二叉树、257二叉树的所有路径、404左叶子之和、222完全二叉树的节点个数
左叶子,要解决两个问题,一是叶子,这个好解决,左右都没孩子就行。至于左就只能从他的父节点着手,所以我就想在他的上一层判断。他是左且无孩那就计数,其他情况则是:左孩子有孩子,就递归传入左孩子;前序遍历,每进入一个节点,就在传入的string里加上节点的值。正如前一天所讲,深度用前序,高度用后序,这里就用后序的递归即可。看到这个标题就知道完全二叉树肯定有专门的特别处理方式,但我没想到很好的,所以还是用处理普通二叉树的方式做了,最基础的后序遍历,也很简单。,返回所有从根节点到叶子节点的路径。
2025-02-13 11:24:38
215
原创 代码随想录算法训练营第十四天 | LeetCode226反转二叉树、101对称二叉树、104二叉树的最大深度、111二叉树的最小深度
我本来想的是联动一下上一题,先层序遍历出一个结果存入List,再将这棵树反转,结果存入List,最后对比两个List的值是否完全一致,是的话则是对称。但这样要遍历两次很麻烦。代码随想录上看到解析,可以用递归和迭代两种方式,重点是同时对比内/外侧。注意用深度的时候,后序的左右中,中间的=左右max+1,其实是高度的思路,从下往上;而前序的中左右才是真正的深度的思路,从上到下。不论用哪种遍历,哪种顺序,也就是在每一步操作的时候将左右孩子交换即可,甚至进入下一步的时候,递归/入栈/入队列的顺序都无所谓。
2025-02-11 16:32:53
249
原创 代码随想录算法训练营第十二天 | 二叉树的递归遍历、迭代遍历、统一迭代法、层序遍历
二叉树的递归遍历二叉树的递归遍历主要就是二叉树的前序、中序、后序遍历。前中后,指的是每个子树根节点的遍历顺序,前序即先遍历根节点,然后是左子树,右子树;中序先遍历左子树,然后是根节点,最后是右子树;后序则是先遍历左子树、右子树,最后才是根节点。
2025-02-09 17:39:15
993
原创 代码随想录算法训练营第十一天 | LeetCode150逆波兰表达式求值、239滑动窗口最大值、347前 K 个高频元素、
由于这道题求K个最高频,也就是找到出现次数最大的K个数,那么应该使用小根堆——因为小根堆顶是堆里最小的,和新来的数比,若堆顶大则说明新数一定不是最大K个中的一个,不对堆进行操作;在线性时间内的遍历,后面的值若大于前面在队列中的值,那么前面的就不可能成为任何一轮的最大,那么就将前面的出队列;在滑动的时候每轮去除一个最前端的,引入一个尾端的,若去除的值和队列顶的一致则说明它大限已到跳出窗口了,将它移出队列;引入的元素,若大于前面的则将前面比它小的全部移除队列,比它大的保留,它自己无论如何都入队尾。
2025-02-08 07:21:04
548
原创 代码随想录算法训练营第十天 | LeetCode232用栈实现队列、225用队列实现栈、20有效的括号、1047删除字符串中的所有相邻重复项
使用最基本的stack实现队列。将后进先出的stackIn栈中的元素挨个出栈并进入另一个stackOut栈,使得stackIn栈中先出的元素在stackOut栈中先进后出,后进的先出,以实现所有元素整体的先进先出。基础queue只能尾插、头出,若想要后插入的先出,那么后插入的就应该在头部,可以在插入时先把原队列中的元素插入另一个队列,再在原队列中插入对应元素,再将另一个队列中的移回来。从后往前遍历string,遇到右括号就将其入栈,遇到左括号则判断:1.栈是否为空,若为空则说明左括号多了,false;
2025-02-07 17:26:14
677
原创 代码随想录算法训练营第九天 | LeetCode151反转字符串中的单词、卡码55右旋转字符串、LeetCode28实现 strStr()、LeetCode459重复的子字符串
151.反转字符串中的单词:给你一个字符串s,请你反转字符串中的顺序。是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的分隔开。返回顺序颠倒且之间用单个空格连接的结果字符串。输入字符串s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。将字符串转化成一个数组(常规操作),创建一个新数组用于储存结果。从后往前遍历,遍历到空格时说明该一个单词结束,记录下单词在原数组的开头和结尾位置,在新数组里正向插入单词以及一个空格。
2025-02-06 18:23:36
355
原创 代码随想录算法训练营第八天 | LeetCode344反转字符串、541反转字符串2、卡码54替换数字
长度为单双数时情况不同,但操作是一样的,到length/2的位置停下即可,双数length/2已经与length/2-1交换,单数length/2的数原地不动即可,两边的均已交换。随后进行遍历,遇到字母就将字母设为新数组的元素,若为数字则以此设为number中的每个字母。给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。
2025-02-05 16:24:39
418
原创 代码随想录算法训练营第六天 | LeetCode242有效的字母异位词、349两个数组的交集、202快乐数、1两数之和
242.有效的字母异位词。
2025-01-28 16:09:07
518
原创 代码随想录算法训练营第四天 | LeetCode24两两交换链表中的节点、19删除链表倒数第N个节点、160相交链表、142环形链表2
24.两两交换链表中的节点。
2025-01-26 17:36:14
913
原创 代码随想录算法训练营第三天 | LeetCode203移除链表元素、707设计链表、206反转链表
2、我之前的代码返回的是之前的前一个/反转后的后一个,导致最后return的是之前的头节点/反转后的尾节点,这样显然是不正确的。然后先考虑addAtIndex方法,判断完index开始遍历,注意在index前插入节点,我们要找的就是index前的一个节点,把新结点插在它和index之间,如果找到index位置,可以让它指向index,但不能让index前的节点指向它。思路:思路比较简单,从头到尾遍历,某节点的下一个节点的val值若等于给定的整数val,则另该节点的next指向该节点下一个节点的next。
2025-01-25 17:21:22
1061
原创 代码随想录算法训练营第一天 | LeetCode704二分查找、LeetCode27移除元素
704.二分查找nnumstargetnumstarget-1思路:因为是有序数组,于是记录首尾(left, right)位置取得最中间元素的值,如果中间的元素等于target,则完成查找;若中间元素小于target,则target只可能在target右边,令left=mid+1,right不变进行循环,反之亦然。编码中的问题:1、循环条件设置为True,只在求得target或全部检查后break跳出,不够直观,在每次循环内加入判断,多此一举;
2025-01-23 02:21:44
341
原创 Datawhale X 魔搭 AI夏令营 Task3
如果希望使用自己的Lora模型,需要在步骤1下载ComfyUI和Lora文件时下载自己的Lora模型,或者将自己的Lora模型上传到步骤1生成的models文件夹中存放默认下载的task1中的Lora模型的文件夹里,也就是“/mnt/workspace/models/lightning_logs/version_0/checkpoints/”路径下。参考通义千问的回答并进行自己的调整,修改Lora模型训练参数并进行训练,使用训练之后的Lora模型进行图像的生成。进阶上分——实战优化。
2024-08-16 00:39:15
424
原创 Datawhale X 魔搭 AI夏令营 Task2
通过通义千问准备提示词。输入你想要的场景、提出要求、给出例子,通义千问会为每个场景编写图像提示词。随后我们在它的基础上进行调整和补充,将得到的提示词输入到baseline文件里,点击双箭头直接运行项目即可。通义千问是具有信息查询、语言理解、文本创作等功能的AI,据它自己所说,编程和技术是他的强项。在task2中,教程和通义千问帮我们解读了每一行代码的含义。本次LoRA模型实践的脚本流程和常规的AIGC流程差不多,包括环境准备、数据集加载和预处理、数据清洗和过滤、模型微调、加载模型、图像生成。
2024-08-13 22:01:13
358
原创 Datawhale X 魔搭 AI夏令营 Task1
随后在“生成图像”模块下的代码中修改“prompt”属性和“negative_prompt”属性,分别设置你希望的图片关键词和不希望出现的关键词。后续点击工具栏中的双箭头一件运行所有代码,等待大概20分钟左右,即可生成图片。按照教程指南内容,开通阿里云PAI-DSW试用,并在魔搭社区授权阿里云联动,创建PAI实例。成功后如下图点击“打开”即可启动实例(注:需要注册阿里云、魔搭社区账号)。(2)输入关键词时注意关键词长度,注意指代明确一些,尽量多描绘各种细节,环境背景等信息。1、免费试用云环境,魔搭授权。
2024-08-10 23:03:25
227
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅