贪心算法
文章平均质量分 78
贪心算法(Greedy Algorithm)是一种解决优化问题的算法策略,其核心思想是每一步都选择当前状态下最优的解决方案,以期望最终达到全局最优解。贪心算法通常适用于满足贪心选择性质和最优子结构性质的问题,能够在某些情况下高效地求解问题。
raykingl
用魔法打败魔法,走楼梯啊!
展开
-
000.贪心算法题解目录
000.贪心算法题解目录001.455分发饼干原创 2024-05-08 21:35:26 · 332 阅读 · 0 评论 -
665. 非递减数列(中等)
[TOC]665. 非递减数列)原创 2024-06-10 22:46:00 · 418 阅读 · 0 评论 -
406. 根据身高重建队列(中等)
应当如何避免上述问题,如果我们始终按照身高由高到底的顺序恢复顺序,那么对于当前身高来说,前序的升高均不低于该升高,此时即可按照索引位置插入了,即采用贪心策略,贪心的先恢复当前队列最高身高属性的位置,对于当前[hi,ki]来说,当前已恢复队列中的升高均不低于hi,因此ki即为[hi, ki]对于此时队列所在的索引位置。2.按照身高降序的顺序依次放入队列中,对于第i个人,因为其身高小于等于前面0到i-1的人的身高故第i个人插入的位置并不会影响前面人的属性,因为第i个人前面有kj个人,故插入索引kj处。原创 2024-06-09 16:17:37 · 629 阅读 · 1 评论 -
122. 买卖股票的最佳时机 II(中等)
实现最大的利润,即只要有盈利就收入囊中,由于交易没有具体限制次数,因此可以依次判断每一天与前一天是否有利润,只要有利润即可实现盈利。:该方法仅能计算最大盈利,但不能求出具体的最佳买卖点,即并不是实际的股票交易过程。原创 2024-06-03 14:10:37 · 466 阅读 · 2 评论 -
763. 划分字母区间(中等)
对于每一个划分,都需要寻找最小结束下标(即该字符最后一个出现位置的索引),因此首先记录每一个字符最后一次出现位置的索引下标,当遍历一个字符时,即可找到满足该字符条件下最小的结束下标。当遍历一个字符c时,即可更新右指针right为max(right,c的结束位置),当遍历位置i和右指针right相遇时,即当前片段为满足条件的最小片段。寻找每个片段最小的结束下标的关键在于如何确保当前片段中的每个字母均已全部出现,因此需要记录每个字符总共出现的次数,当该片段所有字母均已出现即可判断找到最小的结束下标,即。原创 2024-06-03 10:02:58 · 748 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球(中等)
引爆所有气球,弓箭数要最少,那么每支弓箭尽量多的引爆气球,采用贪心策略。对于重叠(仅边界重合也是重叠此题中)的区间,仅需一只弓箭即可引爆即可,因此问题转换为对于重叠的区间仅留一个区间即可,其它区间移除即可,最终留下的区间数则是所需的最少得弓箭数。题目类似,但有区间在于仅边界重合的也可仅用一只弓箭解决,因此对于边界重合的也要视为叠加。原创 2024-05-27 23:06:36 · 308 阅读 · 0 评论 -
605. 种花问题(简单)
因此,最多种植花朵的数量与连续空余位置以及两次是否有花的数量有关系,题目求解转换为遍历花坛的位置,寻找最长的连续空余位置,当满足n的时候即可结束返回真。【两侧有花】现在的问题在花坛中已有一些位置种植了花朵,因此仅能空余位置种植其它花朵,且必须符合规则,即空余位置两侧已有花朵,同样假设连续空余位置长度为m,此时最多种植花朵的数量为(m-1)除以2的商。[1,0,0,0,1],[1,0,0,0,0,1]的情况,此时种植1。[[1,0,1],[1,0,0,1]的情况,此时种植0;原创 2024-05-23 19:25:59 · 618 阅读 · 0 评论 -
435.无重叠空间(中等)
它接收两个参数 o1 和 o2,分别表示需要比较的两个对象, 返回值为整数。要要移除区间的最少,即要求保留的区间最多,思考下,怎么样才能保证保留的区间呢?此时区间的结尾非常关键,结尾越小那么余留给其它区间的空间越大,因此采用贪心的策略。具体操作时,先按照结尾进行升序排序,从第二个区间开始判断,若该区间与前一个区间重叠则移除,否则则该区间作为下一个区间判断时的前一个区间。结尾越小余留的空间越大,因此需首先对各个区间按照结尾的大小进行升序排序,每次选择最小的结尾且与前一个选择的区间不重叠的区间。原创 2024-05-16 16:16:03 · 462 阅读 · 0 评论 -
135.分发糖果(困难)
其中需要注意的时,从右至左分配数,对于分数为5的孩子的糖数应该大于其右边分数为3的孩子,此时即分配4颗糖即可,但在从左至右时,其糖数应该大于左边分数为4的孩子,即分配5颗,因为需要同时满足二者条件,所以取最大值5颗。,且注意分数相同的情况下,则只分配1颗的情况也是满足题目要求的,现在总结规则,如果比相邻分数高,则至少大1,如果比左右邻的孩子都大,则应该至少是左右孩子分配数最大值+1,如果不是最大值,则不满足条件2,例如。,第三个孩子分配1颗,第二个孩子分高分配2颗,第一个孩子分配3颗。原创 2024-05-16 00:01:24 · 1007 阅读 · 0 评论 -
409.最长回文串(简单)
注意仔细阅读回文串的定义,以及仔细观察回文串组成字符的数量特点,从左往右和从右往左读都是一样的,说明一旦左边有一个字符,那么必然右边有一个相同的字符,因此说明回文字符串中出现的字符的次数一定是偶数的,因此,根据上述回文串的特点,为了利用已有字符实现最长回文串,则需最大限度的利用所有的字符(若某字符个数为n,如果n为偶数则使用n个,否则使用n-1个,只要为偶数个则一定可以构成回文),level、noon、racecar、civic和deified。的概念,指:左往右读和从右往左读都是一样的字符序列,例如。原创 2024-05-12 21:47:44 · 395 阅读 · 0 评论 -
455.分发饼干(简单)
因此首先从最小胃口的孩子开始考虑,为满足更多其余孩子的情况,因此仅选择满足当前孩子胃口的最小饼干分配给他(如果不是满足当前孩子最小的,选了一个大的,那这个最小的也不会满足其它孩子的胃口;满足了当前孩子后,对于剩余的孩子依次采用相同的策略,考虑剩余孩子中最小胃口的孩子,直到所有孩子均查看完或者没有饼干再分即结束。当然是胃口越小的越容易满足(PS:因为胃口越小,能够满足的饼干尺寸越多,选择满足的最小尺寸,剩下的饼干又可以满足更大胃口的孩子,进而能够满足的孩子数量越多)。,同理,是从最小尺寸的饼干开始判断,原创 2024-05-08 21:34:02 · 872 阅读 · 1 评论