子串拼接贪心问题
记录各种贪心排序
最大数构造问题
Problem Statement
给定一组非负整数 nums ,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
Constraints
Input
输入包含两行:
- 第一行包含一个整数 ,表示数组的长度。
- 第二行包含 个非负整数,表示数组 中的元素。
Output
输出一个字符串,表示组成的最大的整数。
Sample Input 1
210 2Sample Output 1
210Sample Input 2
53 30 34 5 9Sample Output 2
9534330题目要点解析
交叉组合排序
国王的奖赏游戏
题目要点解析
交叉组合排序
所需的最少能量
Problem Statement
给你一个任务数组 ,其中 :
- 是完成第 个任务需要耗费的能量。
- 是开始第 个任务前需要具备的最少能量。
比如,如果任务为 ,而你当前的能量为 ,那么你不能开始该任务。如果你当前的能量为 ,你可以开始该任务,且完成任务后剩余能量为 。
你可以按 任意顺序 完成任务。请你返回完成所有任务所需的 最少 初始能量。
Constraints
Input
输入包含多行:
- 第一行包含一个整数 ,表示任务的数量。
- 接下来的 行,每行包含两个整数,分别表示 和 。
Output
输出一个整数,表示完成所有任务所需的最少初始能量。
Sample Input 1
51 32 410 1110 128 9Sample Output 1
32Sample Input 2
31 72 83 9Sample Output 2
13题目要点解析
差值贪心排序
知识竞赛的筹备
Problem Statement
部门要选两位员工参加知识竞赛。每个员工 有两个能力值:推理能力 和阅读能力 。
如果选择第 个人和第 个人组队,他们在竞赛中表现出的能力如下:
- 阅读能力:
- 推理能力:
现在需要最大化他们表现较差一方面的能力,即让 尽可能大。请问这个最大值是多少?
Constraints
Input
输入包含多行:
- 第一行包含一个正整数 ,代表员工数。
- 接下来的 行,每行包含两个正整数 和 ,分别描述第 个员工的推理能力和阅读能力。
Output
仅输出一行,包含一个一位小数,表示 的最大值。
Sample Input
32 23 11 3Sample Output
2.0题目要点解析
最小值贪心排序/差值绝对值贪心排序(最小值贪心需要证明正确性,可以对拍)
消灭的怪物数量
Problem Statement
你正在玩一款电子游戏,在游戏中你需要保护城市免受怪物的进攻。给你两个长度为 的整数数组 和 ,其中 是第 只怪物距离城市的初始距离,而 是这只怪物每分钟向城市移动的速度。
你在游戏开始时(第 分钟)有一把武器,并已经蓄力完毕。你可以使用这把武器 瞬间 消灭一只怪物。但是,武器每次使用后都需要 分钟的时间进行再充电,在此期间你无法再次使用。
当怪物的距离 小于或等于 0 时,它就到达了城市,游戏结束。
请返回在输掉游戏前,你最多能消灭的怪物数量。如果你可以在所有怪物到达城市前将它们全部消灭,返回 。
Constraints
Input
输入包含三行:
- 第一行包含一个整数 ,表示怪物的数量。
- 第二行包含 个整数,表示数组 中的元素。
- 第三行包含 个整数,表示数组 中的元素。
Output
输出一个整数,表示你最多能消灭的怪物数量。
Sample Input 1
31 3 41 1 1Sample Output 1
3Sample Input 2
41 1 2 31 1 1 1Sample Output 2
1题目要点解析
性价比排序
最低的雇佣成本
Problem Statement
有 名工人。给定两个整数数组 和 ,其中 表示第 名工人的工作质量, 表示第 名工人的最低期望工资。
现在我们想雇佣恰好 名工人组成一个小组。在雇佣一组工人时,我们必须按照下述规则付费:
- 对小组内的每一名工人,应当按其工作质量与小组内其他工人的工作质量的比例来付工资。
- 小组内每名工人的工资至少应当是其最低期望工资。
请返回支付这 名工人的最低成本。与实际答案误差在 以内的结果将被视为正确。
Constraints
Input
输入包含三行:
- 第一行包含两个整数 和 。
- 第二行包含 个整数,表示数组 中的元素。
- 第三行包含 个整数,表示数组 中的元素。
Output
输出一个浮点数,表示最低总成本,保留五位小数。
Sample Input 1
3 210 20 570 50 30Sample Output 1
105.00000Sample Input 2
5 33 1 10 10 14 8 2 2 7Sample Output 2
30.66667题目要点解析
性价比排序
两地调度贪心问题
先全部选一个数组,然后再适当调整的贪心策略
两地的调度问题
Problem Statement
公司计划面试 名调度人员。给你一个数组 ,其中 ,表示第 人飞往 市的费用为 ,飞往 市的费用为 。
返回将每个人飞往其中一座城市的最低总费用,要求每个城市都有 人抵达。
Constraints
- 是偶数
Input
输入包含多行:
- 第一行包含一个整数 ,表示调度人员的总数。
- 接下来的 行,每行包含两个整数,分别表示 和 。
Output
输出一个整数,表示最低总费用。
Sample Input 1
410 2030 200400 5030 20Sample Output 1
110Sample Input 2
6259 770448 54926 667184 139840 118577 469Sample Output 2
1859题目要点解析
最大异或和问题
题目要点解析
整数拆分贪心问题
整数拆分动态规划是计算拆分的不同方法数,整数拆分贪心是使得最终的累乘积最大
竹子的最大价值
Problem Statement
现需要将一根长为正整数 bamboo_len 的竹子砍为若干段,每段长度均为 正整数 。请返回每段竹子长度的 最大乘积 是多少。
由于答案可能很大,请将结果对 取模。
Constraints
Input
输入仅包含一行:
Output
输出一个整数,表示最大乘积对 取模后的值。
Sample Input
12Sample Output
81题目要点解析
拆分的最大乘积
Problem Statement
给定一个正整数 ,将其拆分为 恰好 k 个 正整数,使得这 个整数的乘积最大。
由于结果可能非常大,请将最终结果对 取模。
Constraints
Input
输入仅包含一行:
Output
输出一个整数,表示最大乘积对 取模后的值。
题目要点解析
整数均摊贪心问题
平均值最小总和
Problem Statement
给定一个长度为 的数组 arr 和一个正整数 。现需要将 arr 划分为 个集合,使得数组中的每个数字恰好进入一个集合。
请计算并返回这 个集合各自平均值的累加和的最小值。每个集合的平均值计算方式为:该集合内所有元素的总和除以元素个数,结果 向下取整 。
Constraints
Input
输入包含两行:
- 第一行包含两个整数 和 ,分别表示数组长度和需要划分的集合数量。
- 第二行包含 个整数,表示数组 中的元素。
Output
输出一个整数,表示所有集合平均值累加和的最小值。
题目要点解析
小船过河贪心问题
双人船渡河问题
Problem Statement
在月黑风高的夜晚, 个人来到河边,准备借助仅有的一盏灯过河。由于河水湍急,每次最多只能有两人同时过河,且过河时必须携带灯。
已知每个人单独过河所需的时间,若两人同时过河,其所需时间取决于较慢的那个人。由于灯只有一盏,每次两人过河后,必须有一人将灯送回对岸,以便其他人过河。
请计算出全员过河所需的最短总时间。
Constraints
- 每个人的过河时间为不超过 的正整数
Input
输入包含多行:
- 第一行包含一个整数 ,表示总人数。
- 接下来 行,每行包含一个整数,表示第 个人过河所需的时间。
Output
输出一个整数表示答案。
Sample Input
412510Sample Output
17题目要点解析
樵夫伐木贪心问题
梦幻城的黄金树
Problem Statement
在梦幻城市中有 棵黄金树,每棵树每天都会结出金子。已知第 棵树初始时已有 个金币,且每天会新长出 个金币。
JAVAMAN 准备在梦幻城市停留 天,每天他只能选择砍掉一棵树并获得该树上所有的金币。需要注意的是,如果某一天他不砍树,那么在那之后的日子里他也无法再砍树。
请计算他在 天内最多可以获得的金币总数。
Constraints
Input
输入包含多个测试用例:
-
第一行包含一个整数 ,表示测试用例的数量。
-
对于每个测试用例:
- 第一行包含两个整数 和 。
- 第二行包含 个整数,表示每棵树初始的金币数 。
- 第三行包含 个整数,表示每棵树每天增长的金币数 。
Output
输出一个整数,表示最多可以获得的金币总数。
Sample Input
22 110 101 12 28 102 3Sample Output
1021题目要点解析
最优的烹调方案
Problem Statement
由于美食节将至,店主希望在 时间内做出一些美味佳肴。现有 件食材,每件食材有三个属性:、 和 。
如果在第 时刻完成第 件食材的烹调,可以获得的美味度为:
每件食材烹调所需的时间为 。请问如何安排烹调顺序,才能使获得的美味度总和最大。
Constraints
Input
输入包含四行:
- 第一行包含两个整数 和 。
- 第二行包含 个整数,表示 。
- 第三行包含 个整数,表示 。
- 第四行包含 个整数,表示 。
Output
输出一个整数,表示最大美味度总和。
Sample Input
74 1502247Sample Output
408题目要点解析
我们一起来打CF
题目要点解析
田忌赛马贪心问题
解锁任务型贪心
复杂版田忌赛马
Problem Statement
中国古代的历史上,齐王和田忌赛马的故事家喻户晓。齐王和田忌各有 匹马,每匹马都有一个固定的速度值。
比赛规则如下:
- 每一轮双方各出一匹马进行比赛,每匹马只能使用一次,直到 匹马全部赛完。
- 在一轮比赛中,如果田忌的马速度大于齐王的马,田忌获胜,得 银币。
- 如果田忌的马速度小于齐王的马,田忌失败,扣除 银币。
- 如果两匹马速度相等,则是平局,不奖励也不扣除银币。
田忌已知齐王出马的顺序。请你通过合理安排田忌出马的顺序,使得田忌最终能获得的银币总数最大。
Constraints
- 马的速度不超过
Input
输入包含三行:
- 第一行包含一个整数 ,表示马的数量。
- 第二行包含 个整数,表示田忌的 匹马的速度。
- 第三行包含 个整数,表示齐王的 匹马的速度。
Output
输出一个整数,表示田忌能获得的最大银币数。
Sample Input 1
392 83 7195 87 74Sample Output 1
200Sample Input 2
220 2020 20Sample Output 2
0题目要点解析
最新版田忌赛马
Problem Statement
田忌与齐王再次进行赛马比赛。这次比赛规则有所不同,田忌需要通过合理安排马匹的对阵顺序,最大化自己的赏金收益。
田忌有 匹马,第 匹马的速度为 ;齐王有 匹马,第 匹马的速度为 。由于田忌对自己和齐王的马匹了如指掌,他知道他和齐王的马都是按速度降序排列的。
每次比赛,田忌可以选择自己的一匹从未出战的马 与齐王的一匹从未出战的马 进行比赛:
- 如果田忌的马速度严格大于齐王的马,田忌将获得 的赏金。
- 如果田忌的马速度小于或等于齐王的马,田忌不会获得赏金。
你需要计算田忌能够获得的 最大 赏金总额。
Constraints
- 数组 和 均已按 升序 排列
Input
输入包含三行:
- 第一行包含两个整数 和 ,分别表示田忌和齐王的马匹数量。
- 第二行包含 个整数,表示田忌各匹马的速度。
- 第三行包含 个整数,表示齐王各匹马的速度。
Output
输出一个整数,表示田忌能够获得的最大赏金总额。
Sample Input 1
2 23 14 2Sample Output 1
2Sample Input 2
3 311 10 710 9 8Sample Output 2
19Sample Input 3
6 76 5 4 3 2 17 6 5 4 3 2 1Sample Output 3
15题目要点解析
加强版田忌赛马
Problem Statement
田忌与齐王再次进行赛马比赛。这次比赛规则有所不同,田忌需要通过合理安排马匹的对阵顺序,最大化自己的赏金收益。
田忌有 匹马,第 匹马的速度为 ;齐王有 匹马,第 匹马的速度为 。由于田忌对自己和齐王的马匹了如指掌,他知道他和齐王的马都是按速度降序排列的。
每次比赛,田忌可以选择自己的一匹从未出战的马 与齐王的一匹从未出战的马 进行比赛:
- 如果田忌的马速度严格大于齐王的马,田忌将获得 的赏金。
- 如果田忌的马速度小于或等于齐王的马,田忌不会获得赏金。
你需要计算田忌能够获得的 最大 赏金总额,以及有多少种 本质不同 的对阵方案可以获得该最大赏金总额。
两种对阵策略被称为本质不同的,当且仅当其中一个对阵策略中,存在某个田忌的马 与齐王的马 比赛,而另一个对阵策略中,田忌的马 不与齐王的马 比赛。
由于对阵策略种类数可能很多,对阵策略种类数只需要计算对 取模后的答案,但是注意不要对最大赏金总额取模。
注意:你不需要最大化比赛数量,不进行任何比赛也是对阵策略的一种。
Constraints
- 数组 和 均已按 降序 排列
Input
输入包含三行:
- 第一行包含两个整数 和 ,分别表示田忌和齐王的马匹数量。
- 第二行包含 个整数,表示田忌各匹马的速度。
- 第三行包含 个整数,表示齐王各匹马的速度。
Output
输出两个整数,第一个整数表示田忌能够获得的最大赏金总额,第二个整数表示有多少种本质不同的对阵策略可以获得该最大赏金总额,其中对阵策略种类数需要对 取模。
Sample Input
2 23 14 2Sample Output
2 2题目要点解析
大规模募资问题
Problem Statement
假设 LeetCode 即将开始 IPO。为了以更高的价格将股票卖给风险投资公司,LeetCode 希望在 IPO 之前开展一些项目以增加其资本。由于资源有限,它只能在 IPO 之前完成最多 个不同的项目。帮助 LeetCode 设计完成最多 个指定的项目后,可获得的最大总资本。
给你 个项目。对于每个项目 ,它都有一个纯利润 ,和启动该项目需要的最小资本 。
最初,你的资本为 。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。
总而言之,从给定项目中选择最多 个不同项目的列表,以 最大化最终资本 ,并输出最终可获得的最多资本。
Constraints
Input
输入包含四行:
- 第一行包含两个整数 和 ,分别表示项目的数量和最多可选择的项目数量。
- 第二行包含一个整数 ,表示初始资本。
- 第三行包含 个整数,表示每个项目的纯利润 。
- 第四行包含 个整数,表示每个项目启动所需的最小资本 。
Output
输出一个整数,表示最终可获得的最大总资本。
Sample Input 1
3 201 2 30 1 1Sample Output 1
4Sample Input 2
3 301 2 30 1 2Sample Output 2
6题目要点解析
最低的加油次数
Problem Statement
汽车从起点出发驶向目的地,该目的地位于距起点 target 英里处。
沿途有若干个加油站,每个 station[i] 代表一个加油站,它位于距起点 英里处,并且有 升汽油。
假设汽车离起点距离无限远且油箱容量无限大,初始时燃料为 startFuel 升。它每行驶 英里就会用掉 升汽油。当汽车到达一个加油站时,它可能停下来加油,将加油站所有的汽油都装入油箱。
为了到达目的地,汽车最少需要加油多少次?如果无法到达目的地,则返回 。
注意:如果汽车到达目的地时剩余燃料为 ,它仍然被视为到达了目的地。如果它到达加油站时剩余燃料为 ,它仍然可以在该加油站加油。
Constraints
Input
输入包含多行:
- 第一行包含两个整数 和 ,分别表示目的地的距离和初始燃料量。
- 第二行包含一个整数 ,表示加油站的数量。
- 接下来 行,每行包含两个整数 和 ,表示第 个加油站距离起点的距离和拥有的燃料量。
Output
输出一个整数,表示最少需要的加油次数。如果无法到达,输出 -1 。
Sample Input 1
100 1110 100Sample Output 1
-1Sample Input 2
100 10410 6020 3030 3060 40Sample Output 2
2题目要点解析
数组同化贪心问题
中位数贪心相关
使数组元素相等
题目要点解析
构造模交替数组
题目要点解析
建筑抢修贪心问题
经典反悔贪心之一
建筑抢修小游戏
Problem Statement
小修正在赶往一些建筑进行抢修。由于建筑物的受损程度不同,抢修每个建筑所需的时间以及该建筑能够支撑的最晚抢修时间也各不相同。
具体而言,第 个建筑抢修需要花费的时间为 ,而它在 时刻之后就会倒塌。如果小修决定抢修某个建筑,他必须在 该建筑倒塌之前 完成抢修。
小修从 时刻出发,每次只能抢修一个建筑。请你帮助小修进行规划,使得他能够抢修的建筑数量最多。
Constraints
Input
输入包含多行:
- 第一行包含一个整数 ,表示建筑的数量。
- 接下来 行,每行包含两个整数 和 ,分别表示抢修该建筑需要的时间和该建筑的最晚倒塌时间。
Output
输出一个整数,表示最多可以抢修的建筑数量。
Sample Input 1
4100 200200 13001000 12502000 3200Sample Output 1
3题目要点解析
城市绿化贪心问题
复杂的种树问题
Problem Statement
在一条环形街道旁共有 棵树。为了美化环境,需要在其中选择 棵树种上装饰物。
种树需要遵守以下规则:
- 任意两棵相邻的树不能同时被种上装饰物。
- 由于是环形街道,第 棵树与第 棵树被视为相邻。
- 每棵树都有一个美观度 ,你的目标是使得选出的 棵树的总美观度最大。
如果无法按照规则种下 棵树,则输出 Error! 。
Constraints
Input
输入包含两行:
- 第一行包含两个整数 和 ,分别表示树的总数和需要种装饰物的树的数量。
- 第二行包含 个整数,表示每棵树的美观度。
Output
输出一个整数,表示最大总美观度。如果方案不存在,输出 Error! 。
Sample Input 1
7 31 2 3 4 5 6 7Sample Output 1
15Sample Input 2
7 41 2 3 4 5 6 7Sample Output 2
Error!