![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心算法
文章平均质量分 52
贪心算法
alone_yue
后端开发 算法 爱好健身打球游泳
展开
-
【Leetcode周赛--贪心算法--实时排序】6112.装满杯子需要的最短总时长
【Leetcode周赛--贪心算法--实时排序】6112.装满杯子需要的最短总时长原创 2022-07-10 14:39:37 · 180 阅读 · 0 评论 -
【百度面试-贪心-子序列】n位数,去除m位,获得最大的值
文章目录1.问题描述2.解决方案1.问题描述给定一个正整数(<=255位),从中删去n位后,使得剩下的数字组成的新数最小(大2.解决方案思路:从左到右开始扫描,两两比较,如果是前一位比后一位大,则删去前大的一位,直到删完所有的n位public class deleteNum { //s="1432219" n=3,返回去除3位之后最小是为 1219 public int method(String s,int n){ //删除n次 for(i原创 2021-12-02 16:44:55 · 609 阅读 · 1 评论 -
【Leetcode贪心股票问题二】714. 买卖股票的最佳时机含手续费
文章目录Leetcode7141.问题描述2.解决方案Leetcode7141.问题描述2.解决方案1.这个和122. 买卖股票的最佳时机 II区别在于,本题有手续费,122题可以直接累加正利润,不用关心买卖了几次只要相加就好,但是本题不可以,因为一味的相加,有可能正利润是相邻的只需要减一次手续费,有些正利润都是不相邻的需要减多次手续费,这样的话其实就没法判断最终利润了的大小了2.于是有了下面的思路,其实我也没有搞得很清楚,而且感觉这个思路也不是很清楚,所以这题还是老老实实dp吧,这个回来多看原创 2021-10-01 20:18:40 · 77 阅读 · 0 评论 -
【Leetcode贪心复杂问题二】968. 监控二叉树
文章目录Leetcode9681.问题描述2.解决方案思路总结:总结:代码实现:Leetcode9681.问题描述2.解决方案思路总结:1,第一步当然是确定大致思路,核心问题摄像头往哪放,其实这个很好想,那就隔一层放一个呗,问题是从根节点开始一层隔一个呢还是从叶子节点一层隔一个呢,如图2.确定遍历顺序,这个后序遍历真的有非常重要的用途,首先就是需要从叶子遍历到根节点的用途,其次就是也是需要从叶子到根并且需要根据儿子结点的状态推导父亲结点的状态时3.核心问题来了如何进行从叶子到根原创 2021-09-30 11:03:07 · 73 阅读 · 1 评论 -
【Leetcode贪心序列问题三】738. 单调递增的数字
文章目录Leetcode7381.问题描述2.解决方案解法一:暴力解法二:贪心(通过个例推断整体)思路:总结:Leetcode7381.问题描述2.解决方案解法一:暴力暴力解法不必多说,就遍历小于等于N的每一个数,并判断是否单调递增即可,代码也很简单这里就不给出了解法二:贪心(通过个例推断整体)思路:1.首先除了暴力,我们好像很难想到其他入手点,说白了就是我们很难通过给的N,去局部改变一个比如说四位数的几个位数,然后实现这个递增的数,说白了遇见98,76,87我们该怎么变化能改变局部原创 2021-09-29 10:57:14 · 118 阅读 · 0 评论 -
【Leetcode贪心区间问题六】56.合并区间
文章目录Leetcode561.问题描述2.解决方案解法一:解法二:总结解法一和解法二的两点不同:Leetcode561.问题描述2.解决方案解法一:这道题呢和452. 用最少数量的箭引爆气球 中的解法一很相似,可以说就基本一样的解题思路1.维护一个temp,当找到一个和temp不重叠的区间时,我们会把temp加入结果集,并且更新temp为找到的这个区间,如果有重叠那就更新temp为并集,不加入结果集2.循环结束别忘了把最后一个temp加入结果集class Solution {pub原创 2021-09-28 21:24:20 · 89 阅读 · 0 评论 -
【Leetcode贪心区间问题五】763. 划分字母区间
文章目录Leetcode7631.问题描述2.解决方案Leetcode7631.问题描述2.解决方案这道题虽然说放在贪心专题里面的,但是并没有很明显的贪心的痕迹在里面,思路可以说很难了1.如果这个区间里出现的所有字母中的出现最远边界等于目前遍历到的index,那就说明找到了目前遍历到的字母的全部集合,后面不会出现这个区间里的字母了2.代码的实现也值得借鉴,在求一个区间每个元素的某个特性的最值,可以在for的开始求一个最大for(int i=0;i<s.size();i++){原创 2021-09-28 19:44:35 · 61 阅读 · 0 评论 -
【Leetcode贪心区间问题四】435. 无重叠区间
文章目录Leetcode4351.问题描述2.解决方案Leetcode4351.问题描述2.解决方案原创 2021-09-25 19:25:06 · 71 阅读 · 1 评论 -
【Leetcode贪心区间问题三】452. 用最少数量的箭引爆气球
文章目录Leetcode4521.问题描述2.解决方案-->说白了就是求这些气球对应区间的交集的个数就是箭的个数解法一:解法二:整体思路:代码实现思路:解法三:3.代码实现究极bugLeetcode4521.问题描述2.解决方案–>说白了就是求这些气球对应区间的交集的个数就是箭的个数解法一:想用哈希,比如说有一个区间(1,6),那就把nums(1,6)标记成1,然鹅发现实现不了因为没那么大数组//思路一:哈希将各个区间给求交集进而判断最后剩几个区间,但是由于xstart,xe原创 2021-09-25 18:37:31 · 141 阅读 · 1 评论 -
【Leetcode贪心两个维度问题二】406. 根据身高重建队列
文章目录Leetcode4061.问题描述2.解决方案Leetcode4061.问题描述2.解决方案原创 2021-09-24 16:08:04 · 116 阅读 · 1 评论 -
【Leetcode贪心简单问题三】860. 柠檬水找零
文章目录Leetcode8601.问题描述2.解决方案Leetcode8601.问题描述2.解决方案没什么好说的,分情况加一点点贪心就好了,代码实现也蛮简单!class Solution {public: bool lemonadeChange(vector<int>& bills) { unordered_map<int,int> unorderedMap{ {5,0},原创 2021-09-24 14:55:24 · 70 阅读 · 1 评论 -
【Leetcode贪心两个维度问题一】135. 分发糖果
文章目录Leetcode1351.问题描述2.解决方案Leetcode1351.问题描述2.解决方案这思路怎么说呢,其实说起来也很简单,就遍历两边分别确定1>2 2<1两种情况,但是吧很难想!(没什么好的办法,把这个题记住并且常看慢慢感悟吧!)class Solution {public: int candy(vector<int>& ratings) { int len=ratings.size(); vec原创 2021-09-24 14:05:30 · 80 阅读 · 1 评论 -
【Leetcode贪心复杂问题一】134. 加油站
文章目录Leetcode1341.问题描述2.解决方案解法一:暴力解法二:贪心Leetcode1341.问题描述2.解决方案解法一:暴力暴力解法:1.遍历每一个点做起点,模拟一圈看看能不能回到起点2.也就是rest+gas[i-1]-cost[i-1]>=0证明可以回到 i,否则回不到3.设计上的巧妙:int rest=gas[i]- cost[i]; //rest代表能开到i+1的保证,如果rest>0代表可以开到i+1代码实现有一点小问题,我一开始想得是没必要每原创 2021-09-24 09:46:27 · 60 阅读 · 1 评论 -
【Leetcode贪心简单问题二】1005. K 次取反后最大化的数组和
文章目录Leetcode10051.问题描述2.解决方案解法一(104ms):解法二(4ms):Leetcode10051.问题描述2.解决方案解法一(104ms):没什么好说的因为每次反转最小的数无论胜负肯定都是最赚的,所以反转一次排一次序,再反转!class Solution {public: int largestSumAfterKNegations(vector<int>& nums, int k) { int i=0;原创 2021-09-23 16:22:04 · 76 阅读 · 1 评论 -
【Leetcode贪心区间问题二】45. 跳跃游戏 II
文章目录Leetcode451.问题描述2.解决方案Leetcode451.问题描述2.解决方案思路关键在于:在当前步覆盖范围内找一个下一步能走最远的,作为下一步的选择!官方说法:以最小的步数增加最大的覆盖范围,直到覆盖范围覆盖到了终点!代码实现也思路清晰1.在i<=curDistance范围内找到最大的nextDistance2.在i==curDistance进行判断要不要再走一步2.1 不用走了2.2 再走一步2.3 剪枝,如果这到终点了直接返回(这一步不一定会提原创 2021-09-23 14:45:12 · 417 阅读 · 1 评论 -
【Leetcode贪心区间问题一】55. 跳跃游戏
文章目录Leetcode551.问题描述2.解决方案Leetcode551.问题描述2.解决方案重要思路:不用纠结跳几步,只要覆盖范围到了就一定可以跳过去!整体思路没毛病了在实现上有点小问题就是:1.class Solution1比class Solution多了如果是1直接返回2.并且在记录range的时候如果大于等于nums.size()-1了直接返回而不是等到最后才判断3.并且要注意i一定是要在range范围内的,如果不在其实就是直接return false了if(n原创 2021-09-23 11:08:36 · 65 阅读 · 1 评论 -
【Leetcode贪心股票问题一】122. 买卖股票的最佳时机 II
文章目录Leetcode1221.问题描述2.解决方案Leetcode1221.问题描述2.解决方案1.关键理解:把最终利润拆分成一天一天的利润之和,然后肯定找局部最优也就是正利润相加就好!2.最关键的思路:拆分利润,也很符合贪心的思想,我想不了那么远,反正我今天赚了就行,保证每天都是赚的最后肯定就是赚的了//贪心算法class Solution1 {public: int maxProfit(vector<int>& prices) {原创 2021-09-23 10:22:53 · 63 阅读 · 1 评论 -
【Leetcode贪心序列问题二】53. 最大子序和
文章目录Leetcode531.问题描述2.解决方案Leetcode531.问题描述2.解决方案利用贪心说实话稍微有一点不太好想!就是如果一个序列和已经是负的了,那不管下一个数是正是负这个负的序列和已经说实话没什么用了,留着也是累赘直接干掉最好!class Solution2 {public: int maxSubArray(vector<int>& nums) { int result=INT16_MIN; int su原创 2021-09-23 09:51:49 · 57 阅读 · 1 评论 -
【Leetcode贪心序列问题一】376. 摆动序列
文章目录Leetcode3761.问题描述2.解决方案Leetcode3761.问题描述2.解决方案本题得到的经验:保持区间波动,只需要把单调区间上的元素移除就可以了,至于代码和思路得多研究研究!class Solution {public: int wiggleMaxLength(vector<int>& nums) { if(nums.size()<=1) return nums.size(); int pre原创 2021-09-23 09:13:11 · 67 阅读 · 1 评论 -
【Leetcode贪心简单问题一】455. 分发饼干
文章目录Leetcode4551.问题描述2.解决方案Leetcode4551.问题描述2.解决方案贪心思想,关键找到符合题意得局部最佳和全局最佳,以及既可以也可以所以不如选择…比如本题:大饼干既可以满足胃口大孩子也可以满足胃口小孩子,那就先满足大胃口好了!代码实现的是小饼干先满足小孩子代码实现技巧:1.按道理是两重循环,先遍历饼干s,后遍历孩子g,也就是拿着一个最小的饼干找到一个最小的孩子,但是第二重循环可以用g_index并且递减代替2.要记住是先遍历饼干,拿着饼干找孩子fo原创 2021-09-22 19:43:51 · 85 阅读 · 1 评论