力扣算法刷题
文章平均质量分 92
力扣算法刷题
丁希希哇
这个作者很懒,什么都没留下…
展开
-
【每日算法】理论:大模型相关 刷题:队列的应用
通过给定一个初始文本序列或部分文本序列,LLM可以利用学到的统计模型来计算下一个最有可能出现的词或字符,然后将其作为生成序列的一部分。zero-shot是在训练集类别和测试集类别之间没有交集的情况下,通过借助类别的描述来建立训练集和测试集之间的联系,从而实现只利用训练集数据训练模型之后,模型就能对测试集的对象进行分类。核心思想:先自行创建一个单调队列,在将大小为k的滑动窗口中元素放进队列中时,如果元素比当前队列中元素值都大,那么就弹出前边的元素,确保当前队列的最外端的元素始终为窗口的最大值。原创 2024-05-02 11:19:08 · 659 阅读 · 0 评论 -
【每日算法】理论:多模态系列 刷题:栈的应用
ViLT提出了一个极其简单的做多模态学习的框架结构,它把模态的特征抽取做到了极小化,把主要的计算量都放到了后面的模态融合上,大大地提高了模型的推理速度,而且让整个方法的建模变得很简单。BLIP模型是多模态领域的经典模型,它的核心思想是通过多路损失函数,以及图像分块理解策略等算法,构建高质量的图像理解模型,实现了视觉语言理解和生成任务的统一。核心思想:与上题类似,栈的目的就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下是不是遍历过相同数值的相邻元素,然后再去做对应的消除操作。原创 2024-04-29 12:00:21 · 1045 阅读 · 0 评论 -
【每日算法】理论:深度学习基础 刷题:栈与队列的转换
Textual Inversion模型的作用在于将独特的对象注入新场景,将它们转换成不同的风格,转移姿势,减少偏见,甚至想象新产品。Textual Inversion模型影响的是模型的embedding部分,以SD为例,就是将SD的子模块text_encoder中的token embedding部分通过训练增加了伪标签的嵌入向量,其他模块均保持不变,所以训练速度超快,效果也很明显。要实现队列向栈的转换,也可以定义两个队列,只不过没有输入和输出的关系,而是将其中一个队列作为备份。原创 2024-04-24 18:44:38 · 1353 阅读 · 0 评论 -
【每日算法】理论:深度学习基础 刷题:KMP算法思想
梯度消失是指在深度学习训练的过程中,梯度随着 BP 算法中的链式求导逐层传递逐层减小,最后趋近于0,导致对某些层的训练失效;梯度爆炸与梯度消失相反,梯度随着 BP 算法中的链式求导逐层传递逐层增大,最后趋于无穷,导致某些层无法收敛;原创 2024-04-22 19:00:46 · 1181 阅读 · 0 评论 -
【每日算法】理论:常见网络架构 刷题:力扣字符串回顾
循环神经网络模型(RNN)是一种节点定向连接成环的人工神经网络,是一种反馈神经网络,RNN利用内部的记忆来处理任意时序的输入序列,并且在其处理单元之间既有内部的反馈连接又有前馈连接。而在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此无法对时间序列上的变化进行建模。具体来说,RNN中的神经元的输出可以在下一个时间段直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出。原创 2024-04-17 08:32:14 · 659 阅读 · 0 评论 -
【每日算法】阶段总结
在写涉及到单调栈用法的题目时,一般情况下首先应该准备单调栈并且一般情况下初始化为0,然后会对原始数组进行遍历,遍历过程中根据题目的要求完成对于单调栈元素的增加或者删除。链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的代码题关键是处理好指针以及各种操作的顺序。涉及到的常用技巧有双指针法、虚拟头节点等。数组是非常基础的数据结构,数组可以方便的通过下标索引的方式获取到下标下对应的数据。原创 2024-04-13 08:30:31 · 619 阅读 · 0 评论 -
【每日算法】理论:深度学习基础 刷题:力扣哈希表回顾
KL散度和JS散度在度量的时候有一个问题:如果p、q离得很远,完全没有重叠的时候,那么KL散度值是没有意义的,而JS散度值是一个常数。这在学习算法中是比较致命的,这就意味这这一点的梯度为0。JS散度度量了两个概率分布的相似度,基于KL散度的变体,解决了KL散度非对称的问题。问题类似,只不过需要多加一层循环。这两道题的关键难点在于不可以包含重复,因此在使用哈希法处理的时候有很多细节需要注意。问题可以先用两层for循环确定 a 和b 的数值,然后利用哈希法来确定 0-(a+b) 是否在 数组里出现过,而。原创 2024-04-12 09:39:21 · 1002 阅读 · 0 评论 -
【每日算法】理论:AIGC算法相关 刷题:力扣哈希表回顾
大多数目标检测算法(稠密预测)在得到最终的预测结果时,特征图的每个位置都会输出多个检测结果,整个特征图上会出很多个重叠的框。NMS算法在每轮选取置信度最大的 Bounding Box ,接着关注所有剩下的 BBox 中与选取的 BBox 有着高重叠(IoU)的,对于IOU>阈值的相邻的检测框,NMS将其得分暴力置零,相当于直接舍弃。具体来说就是先遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到字典中,然后遍历大C和大D数组,统计0-(c+d) 在dict中出现的情况。原创 2024-04-09 08:43:55 · 1097 阅读 · 0 评论 -
【每日算法】理论: DALLE 系列 刷题:力扣链表回顾
局部性假设图片上相邻的区域会有相邻的特征,靠得越近的东西相关性能也就越强,局部性可以控制模型的复杂度。Stable Diffusion XL是一个二阶段的级联扩散模型,除了一个和Stable Diffusion基本一致的base模型之外,SDXL还增加一个单独的基于Latent的Refiner模型,来提升图像的精细化程度。由于卷积核是一样的,无论先做卷积还是平移,卷积核相当于模板,不论图片中同样的物体移到哪里,只要是同样的输入进来,遇到同样的卷积核,其输出永远是一样的。注意是节点相同,不是节点的值相同。原创 2024-03-26 12:51:28 · 1023 阅读 · 0 评论 -
【每日算法】理论:经典神经网络模型 刷题:二分法+双指针
Grounding DINO采用双编码器,单解码器结构,它包含用于图像特征提取的图像主干、用于文本特征提取的文本主干,用于图像和文本特征融合的特征增强器,用于查询初始化的语言引导查询选择模块和用于框细化的跨模态解码器。BERT通过在大量文本数据上进行预训练,学习的到了丰富的语言知识,然后在特定任务上进行微调,如文本分类、情感分析等。Transformer是一种基于自注意力机制的神经网络模型,它的基本结构是由编码器和解码器组成的,编码器可以将输入序列转换为向量表示,而解码器则可以将该向量表示转换回输出序列。原创 2024-03-18 15:18:09 · 1097 阅读 · 0 评论 -
【每日算法】理论:图像分割相关 刷题:设计链表
基本扩散模型根据用户输入的文本提示生成 64x64 像素的图像,之后的两个超分辨率模型分别用于生成分辨率256x256像素和1024x1024像素的图像。解码器由卷积层和上采样层组成,它们对收缩路径中的特征图进行上采样,并将它们与输入图像中的特征组合以生成最终的分割图。另外,unet架构中还有一个跳跃连接的部分,用于将编码器中的特征与解码器的对应层相结合,以便恢复图像的分辨率,提高分割图的精度。val 是当前节点的值,next 是指向下一个节点的指针/引用, prev 是指示链表中的上一个节点。原创 2024-03-22 19:39:53 · 1155 阅读 · 0 评论 -
【每日算法】理论:AIGC微调技术 刷题:滑动窗口、循环
DreamBooth主要用于针对某一个特定的主体,生成在不同的场景、姿势和视角中的该主体上下文图像,不仅能够实现在不同的背景下合成主题的新颖再现,而且能够确保关键视觉特征的高保真度。而schedule算法对每次U-Net预测的噪声进行优化处理(动态调整预测的噪声,控制U-Net预测噪声的强度),从而统筹生成过程的进度。理论上应该是判别器loss逐步下降,生成器 loss 逐步上升,但是这是不一定的,(必须要保证判别器的判别能力),直观上要看最后生成图片的质量。是一个可调参数,用于调节困难样本的权重。原创 2024-03-19 12:19:11 · 1003 阅读 · 0 评论 -
【每日算法】理论:AIGC模型 刷题:力扣链表操作
AnyDoor就是“任意门”算法,它可以将任意目标传送到指定场景的指定位置,无需微调,被传送的目标会自动对新的场景进行姿态、角度、动作等方面的调整,确保生成图像的多样性以及和谐度。AnyDoor方法的核心思想在于将目标表征成“ID相关”和“细节相关”的特征,然后将他们组合到与背景场景的交互中。IP-adapter包含编码器和适配器两个部分,将图像特征通过Image Encoder、线性层和LN得到图像特征,文本通过文本编码器得到文本特征,图像特征和文本特征通过解耦交叉注意力的适配模块注入到unet中。原创 2024-03-25 11:21:54 · 1127 阅读 · 0 评论 -
【每日算法】理论:常见AIGC模型; 刷题:力扣单调栈
图像编码器VAE Encoder会将输入的图像转换为低维的Latent特征,而文本信息则会通过CLIP Text Encoder模型进行编码,处理过后的文本信息和图像信息会输入到图像优化模块中,图像优化模块进行优化迭代后,将其输出的低维Latent特征输入回图像解码器(VAE Decoder)中,重建成像素级图。这道题需要分别寻找元素右边和左边的最大元素来计算雨水面积,由于单调栈的作用是寻找一个元素右边或者左边第一个比自己大或者小的元素的位置,所以单调栈保存的标号主要是用来求雨水面积中的行。原创 2024-03-17 12:10:39 · 1250 阅读 · 0 评论 -
【每日算法】理论: 扩散模型+深度学习基础 刷题:力扣哈希表回顾
去噪扩散隐式模型(DDIM)是一类更有效的迭代隐式概率模型,具有与DDPM相同的训练程序,但是它不再限制扩散过程必须是一个马尔卡夫链,这使得DDIM可以采用更小的采样步数来加速生成过程,DDIM的另外是一个特点是从一个随机噪音生成样本的过程是一个确定的过程(中间没有加入随机噪音)。核心思路:定义一个数组叫做record用于遍历增加记录字符串s里字符出现的次数,然后遍历减少记录字符串t里字符出现的次数,最后判断record中的记录是否为0。是判断两个字符串中的元素出现次数,是判断两个数组中的元素出现次数,原创 2024-03-29 09:47:07 · 1277 阅读 · 0 评论 -
【每日算法】理论:生成模型基础; 刷题:力扣单调栈
马尔可夫过程是一种随机过程,其中未来状态只依赖于当前的状态,而与过去状态无关。原创 2024-03-16 12:00:57 · 1091 阅读 · 0 评论 -
代码随想录算法训练营|一刷总结与反思
一刷代码随想录正式结束,之前没有系统的学习过,甚至没有刷过力扣题,第一次刷的题采用的先看卡哥的视频然后再试着自己敲一遍代码的方式,中间还有一些题目看完之后写代码也仍然有不少问题,就跟着代码随想录的“参考代码”敲了一遍。断断续续花了两个月,终于成功的完成了代码随想录的一刷。总共刷的内容有:数组、链表、哈希表、字符串、双指针法、栈与队列、二叉树、回溯算法、贪心算法、动态规划、单调栈。原创 2024-03-19 17:17:42 · 1026 阅读 · 0 评论 -
代码随想录算法训练营第五十二天|84.柱状图中最大的矩形,完结撒花✿✿ヽ(°▽°)ノ✿
给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。本题和42. 接雨水 (opens new window),是遥相呼应的两道题,接雨水是求外,柱状图中最大的矩形是求内。原创 2024-03-14 09:05:21 · 981 阅读 · 0 评论 -
代码随想录算法训练营第五十一天|503.下一个更大元素II,42. 接雨水
给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。原创 2024-03-13 20:54:46 · 929 阅读 · 0 评论 -
代码随想录算法训练营第五十天|739. 每日温度,496.下一个更大元素 I
nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素。用来记录我们遍历过的元素,因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。原创 2024-03-12 16:36:59 · 925 阅读 · 0 评论 -
代码随想录算法训练营第四十九天|647. 回文子串,516.最长回文子序列,动态规划总结篇
确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组背包问题系列打家劫舍系列股票系列子序列系列。原创 2024-03-11 20:35:15 · 981 阅读 · 0 评论 -
代码随想录算法训练营第四十八天|583. 两个字符串的删除操作,72. 编辑距离
确定dp数组(dp table)以及下标的含义:dp[i][j]表示以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。确定dp数组(dp table)以及下标的含义:以下标i-1为结尾的字符串word1和以下标j-1为结尾的字符串word2的最少操作次数就是 dp[i][j]dp数组如何初始化:dp[i][0] = i,dp[0][j]=j。dp数组如何初始化:dp[i][0] = i,dp[0][j]=j。原创 2024-03-09 21:04:21 · 944 阅读 · 0 评论 -
代码随想录算法训练营第四十七天|392.判断子序列,115.不同的子序列
确定dp数组(dp table)以及下标的含义:dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]确定dp数组(dp table)以及下标的含义:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 + 7 取模。dp数组如何初始化:dp[i][0] = 1,dp[0][j] = 0,其中dp[0][0]=1。原创 2024-03-08 14:53:13 · 902 阅读 · 0 评论 -
代码随想录算法训练营第四十六天|1143.最长公共子序列,1035.不相交的线,53. 最大子序和
现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:nums1[i] == nums2[j],且绘制的直线不与任何其他连线(非水平线)相交。确定dp数组(dp table)以及下标的含义:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]确定递推公式:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])确定遍历顺序:从左到右遍历,从上到下遍历。原创 2024-03-08 13:36:26 · 994 阅读 · 0 评论 -
代码随想录算法训练营第四十五天|300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …确定递推公式:当A[i - 1] 和B[j - 1]相等的时候,dp[i][j] = dp[i - 1][j - 1] + 1。确定递推公式:if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1)确定遍历顺序:A和B先遍历哪一个都可以。原创 2024-03-07 18:51:00 · 921 阅读 · 0 评论 -
代码随想录算法训练营第四十四天|309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费,总结
动态规划来决定最佳时机,这次含手续费!| LeetCode:714.买卖股票的最佳时机含手续费。原创 2024-03-07 13:53:19 · 803 阅读 · 0 评论 -
代码随想录算法训练营第四十三天|123.买卖股票的最佳时机III,188.买卖股票的最佳时机IV
给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。一天一共就有五个状态:①没有操作 (其实我们也可以不设置这个状态),②第一次持有股票,③第一次不持有股票,④第二次持有股票,⑤第二次不持有股票。本题和动态规划:123.买卖股票的最佳时机III (opens new window)最大的区别就是这里要类比j为奇数是买,偶数是卖的状态。dp数组如何初始化:dp[0][j]当j为奇数的时候都初始化为 -prices[0]确定遍历顺序:从前到后遍历。原创 2024-03-04 16:24:37 · 865 阅读 · 0 评论 -
代码随想录算法训练营第四十二天|121. 买卖股票的最佳时机,122.买卖股票的最佳时机II
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。这是因为本题的股票可以买卖多次,所以买入股票的时候,可能会有之前买卖的利润即:dp[i - 1][1],所以dp[i - 1][1] - prices[i]。确定dp数组(dp table)以及下标的含义:dp[i][0] 表示第i天持有股票所得最多现金,dp[i][1] 表示第i天不持有股票所得最多现金。原创 2024-03-04 14:52:23 · 910 阅读 · 0 评论 -
代码随想录算法训练营第四十一天|198.打家劫舍,213.打家劫舍II,337.打家劫舍III
代码随想录算法训练营第一天|数组理论基础,704. 二分查找,27. 移除元素代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II代码随想录算法训练营第三天|链表理论基础,203.移除链表元素,707.设计链表,206.反转链表代码随想录算法训练营第四天|24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II,总结代码随想录算法训练营第五天|哈希表理论基础,242.有效的字母异位词,349.原创 2024-03-03 12:28:19 · 852 阅读 · 0 评论 -
代码随想录算法训练营第四十天|139.单词拆分,多重背包介绍,背包问题总结篇!
有N种物品和一个容量为V 的背包。第i种物品最多有Mi件可用,每件耗费的空间是Ci ,价值是Wi。求解将哪些物品装入背包可使这些物品的耗费的空间 总和不超过背包容量,且价值总和最大。每件物品最多有Mi件可用,如果把把Mi件摊开,其实就是一个01背包问题了。几种常见的背包:确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组。原创 2024-03-03 10:55:32 · 938 阅读 · 0 评论 -
代码随想录算法训练营第三十九天|70. 爬楼梯 (进阶),322. 零钱兑换,279.完全平方数
确定递推公式:dp[j] = min(dp[j - coins[i]] + 1, dp[j])确定dp数组(dp table)以及下标的含义:凑足总额为j所需钱币的最少个数为dp[j]确定dp数组(dp table)以及下标的含义:爬到有i个台阶的楼顶,有dp[i]种方法。确定遍历顺序:求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。dp数组如何初始化:dp[0] = 1,下标非0的dp[j]初始化为0。dp数组如何初始化:dp[0] = 0,下标非0的元素都是应该是最大值。原创 2024-03-02 11:59:06 · 860 阅读 · 0 评论 -
代码随想录算法训练营第三十八天|完全背包,518. 零钱兑换 II,377. 组合总和 Ⅳ
请你计算并返回可以凑成总金额的硬币组合数。求装满背包有几种方法,公式都是:dp[j] += dp[j - nums[i]]求装满背包有几种方法,公式都是:dp[j] += dp[j - nums[i]]完全背包的核心代码:(完全背包的物品是可以添加多次的,所以要从小到大去遍历)组合问题:外层for循环遍历物品(钱币),内层for遍历背包(金钱总额)排列问题:外层for循环遍历背包(金钱总额),内层for遍历物品(钱币)组合问题:外层for循环遍历物品(钱币),内层for遍历背包(金钱总额)原创 2024-03-01 10:21:50 · 891 阅读 · 0 评论 -
代码随想录算法训练营第三十七天|1049. 最后一块石头的重量 II,494. 目标和,474.一和零
1049. 最后一块石头的重量 II有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。原创 2024-02-29 09:15:08 · 986 阅读 · 0 评论 -
代码随想录算法训练营第三十六天|背包理论基础,416. 分割等和子集
由dp[i - 1][j - weight[i]]推出,dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值,那么dp[i - 1][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最大价值。确定递推公式: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i])多重背包:n种物品,每种物品的个数各不相同。原创 2024-02-28 16:45:34 · 1101 阅读 · 0 评论 -
代码随想录算法训练营第三十五天|343. 整数拆分,96.不同的二叉搜索树
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积。给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。原创 2024-02-27 20:29:26 · 920 阅读 · 0 评论 -
代码随想录算法训练营第三十四天|62.不同路径,63. 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。确定dp数组(dp table)以及下标的含义:dp[i][j]表示从(0,0)出发,到(i, j) 有dp[i][j]条不同的路径。确定递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1]原创 2024-02-27 19:00:00 · 1506 阅读 · 0 评论 -
代码随想录算法训练营第三十二天|738.单调递增的数字,968.监控二叉树,总结
贪心无套路,也没有框架之类的,需要多看多练培养感觉才能想到贪心的思路;贪心的本质是选择每一阶段的局部最优,从而达到全局最优。原创 2024-02-21 08:53:25 · 997 阅读 · 0 评论 -
代码随想录算法训练营第三十三天|动态规划理论基础,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的。原创 2024-02-22 07:55:49 · 952 阅读 · 0 评论 -
代码随想录算法训练营第三十一天|435. 无重叠区间,763.划分字母区间,56. 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi]。思路:类似于“用最少的箭射气球”,按照左边界排序后,直接求重叠的区间,result为记录重叠区间数。原创 2024-02-20 10:09:29 · 1027 阅读 · 0 评论 -
代码随想录算法训练营第三十天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球
墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆。可以射出的弓箭的数量 没有限制。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。原创 2024-02-19 10:27:55 · 1097 阅读 · 0 评论