贪心算法专题
文章平均质量分 65
贪心算法专题
小付爱coding
试试总有机会
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【玩转贪心算法专题】968. 监控二叉树【困难】
解释:需要至少两个摄像头来监视树的所有节点。如果是以下情况,其实就是 左右孩子节点有一个有摄像头了,那么其父节点就应该是2。输入:[0,0,null,0,null,0,null,null,0]左孩子有覆盖,右孩子有覆盖,那么此时中间节点应该就是无覆盖的状态了。此时摄像头的数量要加一,并且return 1,代表中间节点放摄像头。给定一个二叉树,我们在树的节点上安装摄像头。给定树的节点数的范围是 [1, 1000]。情况2:左右节点至少有一个无覆盖的情况。输入:[0,0,null,0,0]原创 2024-09-29 07:40:41 · 706 阅读 · 0 评论 -
【玩转贪心算法专题】738. 单调递增的数字【中等】
如果从前往后遍历,第一次 33,没问题,第二次32,需要改为 329,但发现329其实并不能满足单调递增。判断两数之间是否单调递增,如果不是则需要变化,将前一个数-1,后面全部置为9,但要主要需从后往前遍历。当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增。输入: n = 1234。输入: n = 332。输入: n = 10。原创 2024-09-27 07:44:01 · 543 阅读 · 0 评论 -
【玩转贪心算法专题】56. 合并区间【中等】
按照左边界从小到大排序之后,如果 intervals[i][0] <= intervals[i - 1][1] 即intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].输入:intervals = [[1,4],[4,5]]输出:[[1,6],[8,10],[15,18]]输出:[[1,5]]原创 2024-09-27 07:19:17 · 650 阅读 · 0 评论 -
【玩转贪心算法专题】763. 划分字母区间【中等】
像 “ababcbacadefegde”, “hijhklij” 这样的划分是错误的,因为划分的片段数较少。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。划分结果为 “ababcbaca”、“defegde”、“hijhklij”。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。输入:s = “ababcbacadefegdehijhklij”返回一个表示每个字符串片段的长度的列表。输入:s = “eccbbbbdec”输出:[9,7,8]原创 2024-09-23 07:41:24 · 608 阅读 · 0 评论 -
【玩转贪心算法专题】452. 用最少数量的箭引爆气球是【中等】
墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。输入:points = [[10,16],[2,8],[1,6],[7,12]]输入:points = [[1,2],[3,4],[5,6],[7,8]]输入:points = [[1,2],[2,3],[3,4],[4,5]]-在x = 11处发射箭,击破气球[10,16]和[7,12]。-在x = 6处射出箭,击破气球[2,8]和[1,6]。原创 2024-09-14 07:56:02 · 1036 阅读 · 0 评论 -
【玩转贪心算法专题】406. 根据身高重建队列【中等】
因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]输入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]那么只需要按照k为下标重新插入队列就可以了。原创 2024-09-11 07:40:46 · 790 阅读 · 0 评论 -
【玩转贪心算法专题】860. 柠檬水找零【简单】
每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。对于最后一位顾客,我们无法退回 15 美元,因为我们现在只有两张 10 美元的钞票。对于接下来的 2 位顾客,我们收取一张 10 美元的钞票,然后返还 5 美元。第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5。前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。原创 2024-09-10 07:21:08 · 734 阅读 · 0 评论 -
【玩转贪心算法专题】135. 分发糖果[困难]
2、起点下标 ratings.length - 2 从右往左, 只要左边 比 右边 大,此时 左边的糖果应该 取本身的糖果数(符合比它左边大) 和 右边糖果数 + 1 二者的最大值,这样才符合 它比它左边的大,也比它右边大。1、起点下标1 从左往右,只要 右边 比 左边 大,右边的糖果=左边 + 1。解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目。原创 2024-09-09 07:35:56 · 794 阅读 · 0 评论 -
【玩转贪心算法专题】134. 加油站【中等】
i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]原创 2024-09-03 07:18:54 · 765 阅读 · 0 评论 -
【玩转贪心算法专题】55. 跳跃游戏【中等】
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标。贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。解释:无论怎样,总会到达下标为 3 的位置。解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。判断你是否能够到达最后一个下标,如果可以,返回 true;否则,返回 false。输入:nums = [2,3,1,1,4]输入:nums = [3,2,1,0,4]原创 2024-08-21 07:19:48 · 344 阅读 · 0 评论 -
【玩转贪心算法专题】122. 买卖股票的最佳时机 II
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。输入:prices = [7,1,5,3,6,4]返回 你能获得的 最大 利润。原创 2024-08-20 07:47:54 · 417 阅读 · 0 评论 -
【玩转贪心算法专题】53. 最大子数组和(多语言Java/C++/Python/Go)
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]可能大家回想到双层for循环去遍历,思路没问题但最终结果会超时。解释:连续子数组 [4,-1,2,1] 的和最大,为 6。输入:nums = [5,4,-1,7,8]第二种则是这个专题的方法-贪心。输入:nums = [1]是数组中的一个连续部分。原创 2024-08-15 07:27:56 · 463 阅读 · 1 评论 -
【贪心算法专题】455. 分发饼干 Java C++ Python Go
【贪心算法专题】455. 分发饼干 Java C++ Python Go语言原创 2024-08-12 07:58:34 · 229 阅读 · 0 评论
分享