参考链接:https://blog.csdn.net/weixin_43201538/article/details/86769803
看来左神的算法视频, 其中他总结了几道经典的贪心算法, 但是牛客网没有相应的题目, 就自己找了一下, 用python实现了.
题目1. 切金条
题目2. IPO项目
题目3. 会议室安排
题目1. 切金条
一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分整块金 条,怎么分最省铜板?
例如,给定数组{10,20,30},代表一共三个人,整块金条长度为10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长度60的金条分成10和50,花费60 再把长度50的金条分成20和30,花费50 一共花费110铜板。
但是如果, 先把长度60的金条分成30和30,花费60 再把长度30金条分成10和20,花费30 一共花费90铜板。
输入一个数组,返回分割的最小代价.
代码链接: https://github.com/20130353/Leetcode/blob/master/target_offer/切金条
题目2. IPO项目
解题关键是:每次从能做的项目中找到收益最大的一个
在代码实现时,就是准备一个最小堆(用来排序每个项目的启动资金 从小到大排),全部项目信息装入这个堆中。 再准备一个最大堆(用来排序每个项目的收益 从大到小排)可以做的项目装入这个堆中,每次做的是这个堆顶的项目,也就是收益最大的项目。 直到循环够了k次,或者最小堆中没有元素可以放入最大堆了就停。
代码链接: https://github.com/20130353/Leetcode/blob/master/target_offer/IPO项目
因为python3的heapq结构不能直接存储结构体(类),所以我用map保存了对应的数据.
题目3. 会议室安排
[题目描述]
在大公司里,会议是很多的,开会得有场子,要场子你得先在电子流里预订。
如果你是项目组新来的小弟,那么恭喜你,每天抢订会议室的任务就光荣的分给你了。
老大要求你尽可能多的订会议室,但是这些会议室之间不能有时间冲突。
[Input]
input文件中可以包括多个测试案例。
T(T ≤ 20),输入文件的第一行表示文件中有多少个测试案例。
N(1 ≤ N ≤ 500),每个测试案例的第一行表示会议室的数目。
每个测试案例中,除第一行以外表示各个会议室的信息。每行会有3个数字,分别表示会议编号、会议起始时间、会议结束时间。
[Output]
输出可以安排的最大会议数目
[I/O Example]
Input
2
6
1 1 10
2 5 6
3 13 15
4 14 17
5 8 14
6 3 12
15
1 4 8
2 2 5
3 2 6
4 4 6
5 2 3
6 1 6
7 4 7
8 3 5
9 3 8
10 1 2
11 1 7
12 2 4
13 5 6
14 4 5
15 7 8
Output
3
5
解题关键: 谁先结束就排谁
代码链接:https://github.com/20130353/Leetcode/blob/master/target_offer/安排会议室