会议日程安排问题
- 题目解释
- 一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目宣讲。给你每个项目的开始时间和结束时间,你来安排宣讲的日程,要求会议室进行宣讲的场数最多。
- 返回最多的宣讲场次。
- 思路:本题常见的几种贪心策略,
- 一种是按照谁先开始安排谁,
- 第二种按照持续时间短的先安排,
- 第三种按照谁先结束安排谁。
- 通过验证,无需证明得出第三种贪心策略是正确的
- 方法一:全排列,暴力解出
- 方法二:写比较器,根据谁的结束时间早,来排序
居民楼路灯问题
- 题目解释
- 给定一个字符串str,只由‘X’和‘.’两中国字符构成。
- ‘X’表示墙,不能放灯,也不需要点亮,‘.’表示居民点,可以放灯,需要点亮。
- 如果灯放在i位置,可以让i-1,i和i+1三个位置被点亮,返回如果点亮str中所需要点亮的位置,至少需要几盏灯
- 例如: .X…X…X…X. 需要至少5盏灯
- 纯暴力,用来做对数器。点的位置放灯和不放灯全排列
- 贪心解法
- 如果i位置是X,就跳到i+1位置做决定
- 如果i位置是.
- 如果i+1位置是X,必须在i位置放灯,再去i+2做决定
- 如果i+1位置是.
- 如果i+2是X,i+1放灯,再去i+3做决定
- 如果i+2是.,i+1放灯,再去i+3做决定
- 代码:
哈夫曼树问题
- 题目解释
- 一根金条切成两半,是需要花费和长度值一样的铜板的。
- 比如长度为20的金条,不管怎么切,都需要花费20个铜板。一群人想整分整块金条,怎么分最省铜板?
- 例如:给定数组[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个铜板。
- 输入一个数组,返回分割的最小代价。
- 贪心策略最常用的手段
- 小根堆
- 大根堆
- 排序
- coding代码量很少。因为堆天然就具备根据我们自定义的排序规则重新组织数据的能力,然后依次弹出样本,本身包含贪心的意思.
- 暴力解法
- 贪心解法
- 贪心解法,建立一个小根堆,把所有数扔进去
- 每一次弹出两个数,合并成一个数
- 代价就是非叶子节点
项目花费和利润问题
- 题目解释
- 输入:正数数组costs,正数数组profits,正数K,正数M
- costs[i]表示i号项目的花费,profits[i]表示i号项目在扣除花费之后还能挣到的钱(利润)
- K 表示你只能串行的最多 K 个项目, M 表示你的初始资金。
- 说明:每做完一个项目,马上获得收益,可以支持你去做下一个项目。不能并行的做项目。
- 输出:你最后获得的最大钱数。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 963614756@qq.com。