![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心算法
贪心算法
龙崎流河
沉淀
展开
-
253. 会议室 II(会员题目)
举例来说,如果输入 meetings = [[0,30],[5,10],[15,20]],那么我们就给数组中 [0,30],[5,10],[15,20] 这几个索引区间分别加一,最后遍历数组,求个最大值就行了。比如给你输入 meetings = [[0,30],[5,10],[15,20]],算法应该返回 2,因为后两个会议和第一个会议时间是冲突的,至少申请两个会议室才能让所有会议顺利进行。把这些会议的时间区间进行投影,红色的点代表每个会议的开始时间点,绿色的点代表每个会议的结束时间点。原创 2023-01-09 14:59:42 · 353 阅读 · 0 评论 -
1024. 视频拼接
首先要进行排序:排序顺序以二维数组第一个值为准顺序从小到大排列,如果二维数组第一值也就是视频起始点相等,则按照终点逆序排列。为什么这样排序呢,主要考虑到这道题的以下两个特点:1、要用若干短视频凑出完成视频 [0, T],至少得有一个短视频的起点是 0。这个很好理解,如果没有一个短视频是从 0 开始的,那么区间 [0, T] 肯定是凑不出来的。2、如果有几个短视频的起点都相同,那么一定应该选择那个最长(终点最大)的视频。原创 2023-01-09 14:53:35 · 1223 阅读 · 0 评论 -
968. 监控二叉树
首先明确把摄像头放在叶子节点的父节点位置,才能充分利用摄像头的覆盖面积。贪心算法:从下到上看局部最优,因为下面的节点最多,让叶子节点的父节点安摄像头最合理,所用摄像头最少。整体全局最优,全部摄像头数量最少。采用后序遍历能做到从下到上遍历。来看看这个状态应该如何转移,先来看看每个节点可能有几种状态:判断空节点状态:空节点不能是无覆盖的状态,这样叶子节点就要放摄像头了,空节点也不能是有摄像头的状态,这样叶子节点的父节点就没有必要放摄像头了,而是可以把摄像头放在叶子节点的爷爷节点上。原创 2023-01-07 14:40:54 · 590 阅读 · 0 评论 -
714. 买卖股票的最佳时机含手续费
每次买入股票代表一次交易都需要支付一次手续费。买入成本就是 买入价格 + 一次手续费什么时候卖出能利益最大化呢?首先你的卖出价格必须大于买入成本,这样才有利润可言,但当其大于买入成本,也可能不是最终的卖出价格,先将卖出价格减去买入价格的值累加,这行代码很关键,将买入价格设置为当前价格,如果下一个价格的值加上手续费的价格小于当前价格,说明下一个值更适合作为买入价格(利润等于 卖出价格 - 买入价格(买入价格小了,则利润更大了)),反之大于的话,不需要掏手续费继续累加。具体详细见代码。原创 2023-01-07 14:00:52 · 47 阅读 · 0 评论 -
738. 单调递增的数字
局部最优:遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]–,然后strNum[i]给为9,可以保证这两位变成最大单调递增整数。全局最优:得到小于等于N的最大单调递增的整数。从前后向遍历会改变已经遍历过的结果,因此从后向前遍历。最后代码实现的时候,也需要一些技巧,用一个flag来标记从哪里开始赋值9。原创 2023-01-06 19:19:38 · 46 阅读 · 0 评论 -
763. 划分字母区间
在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。此时前面出现过所有字母,最远也就到这个边界了。原创 2023-01-06 15:47:00 · 57 阅读 · 0 评论 -
56. 合并区间
首先进行排序,排序顺序就按数组第一个数字从小到大的顺序排列即可。排序完,遍历整个二维数组。如果上一个数组和下一个数组发生这种情况则合并数组,我们需要再创建一个二维数组,将合并前的那个数组删除,再添加整个合并后的数组,依次类推,最终返回二维数组,具体请看题解代码。原创 2023-01-06 15:35:54 · 54 阅读 · 0 评论 -
435. 无重叠区间
该题解就是在452. 用最少数量的箭引爆气球基础上的题解,那道题求最少弓箭数,最少弓箭数其实就是非交叉区间个数,并且修改一下判断条件,intervals[i][0] 和 intervals[i-1][1]相等时不会算作重叠,最后结果就是总区间数减去非交叉区间个数。原创 2023-01-05 16:48:34 · 59 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球
贪心算法:局部最优:当气球出现重叠,一起射,所用弓箭最少。全局最优:把所有气球射爆所用弓箭最少。为了尽可能让气球重叠,需要对数组进行排序。以气球的起始位置排序,从前向后遍历。可以看出首先第一组重叠气球,一定是需要一个箭,气球3,的左边界大于了 第一组重叠气球的最小右边界,所以再需要一支箭来射气球3了。原创 2023-01-05 16:05:31 · 53 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
贪心算法:局部最优:每天都做到不赔钱,只赚钱。全局最优:所有天加一起赚的最多。正利润:4+3+5 = 7。原创 2023-01-04 21:39:49 · 55 阅读 · 0 评论 -
55. 跳跃游戏 45. 跳跃游戏 II
每移动一个单位就更新最大覆盖范围,如果最大覆盖范围大于等于最后一个下标则返回true,否则返回false。局部最优解:每次取最大跳跃步数(取最大覆盖范围)。整体最优解:最后得到整体最大覆盖范围,看是否能到终点。原创 2023-01-04 21:26:42 · 82 阅读 · 0 评论 -
1005.K次取反后最大化的数组和
首先以绝对值大小从大到小将nums数组排序,这么排序的目的是当遍历nums数组是判断元素是否小于0,如果小于0并且k大于0则将小于0的这个元素取反,这个元素的绝对值大,负数的话取反达到局部最优,如果全部遍历完k还大于0,判断k是否为奇数,偶数的话不用管,因为遍历完数组就都是正数,如果给最后一个元素取反次数为偶数等于不变,为奇数就给最后一个元素取反,因为最后一个元素绝对值最小,取反后达到局部最优,将数组中的所有元素加在一起值最大达到整体最优。原创 2023-01-04 18:31:03 · 54 阅读 · 0 评论 -
134. 加油站
每个加油站的剩余量rest[i]为gas[i] - cost[i]我们主要研究这个加油站剩余量:i从0开始累加rest[i],和记为cur,一旦cur小于零,说明[0, i]区间都不能作为起始位置,起始位置index从i+1算起,再从0计算curSum。都遍历完一遍只要耗油总量大于等于0,那么index就起始位置。局部最优:当前累加rest[j]的和cur一旦小于0,起始位置至少要是j+1,因为从j开始一定不行。全局最优:找到可以跑一圈的起始位置。原创 2023-01-04 16:57:20 · 46 阅读 · 0 评论 -
135. 分发糖果
【代码】135. 分发糖果。原创 2023-01-01 00:45:56 · 64 阅读 · 0 评论 -
柠檬水找零
仔细一看,可供我们做判断的空间非常少。原创 2022-12-31 23:45:52 · 49 阅读 · 0 评论 -
406. 根据身高重建队列
遇到两个维度权衡时,一定要先确定一个维度再确定另一个维度。局部最优:我们将身高由大到小排序后,优先按身高高的people的k来插入,插入操作后的people满足队列属性。全局最优:最后都做完插入操作,整个队列满足题目队列属性。原创 2022-12-27 22:57:54 · 71 阅读 · 0 评论 -
53. 最大子数组和
思路1:动态规划思路2:贪心算法局部最优:当前连续和为负数的时候就放弃,从下一个元素重新计算连续和(因为负数加上连续和会越来越小)。全局最优:局部最优的情况下,记录最大连续和,推出全局最优。原创 2022-12-26 21:47:14 · 62 阅读 · 0 评论 -
376. 摆动序列
贪心算法局部最优:删除单调坡度上的节点,那么这个坡度就可以有两个局部峰值。全局最优:整个序列有最多的局部峰值,从而达到最长摆动序列。原创 2022-12-26 20:38:59 · 68 阅读 · 0 评论 -
455. 分发饼干
贪心算法第一题,这里的局部最优就是大饼干给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。原创 2022-12-26 14:58:39 · 71 阅读 · 0 评论