贪心问题 区间问题

贪心问题 区间问题
(1)最大的不相交的区间的个数
先将右端点排序,然后如果左端点的大小大于当前的右端点的大小,那么个数就+1、然后更新右端点
具体见 acwing 905与908
(2)区间分组
将每个区间分组,保证每个区间中都没有重叠的部分
先将左端点排序,然后将右端点加入到一个优先队列中。如果当前左端点的值小于优先队列的队头元素的值,那么说明当前端点存在与前面的组
重叠的部分,需要重新开一组,将其右端点加入到优先队列中。反之,就将优先队列的队头poll,并且将现在的端点的右端点加入。
acwing 906
(3)区间覆盖
给定 N 个闭区间 [ai,bi] 以及一个线段区间 [s,t],请你选择尽量少的区间,将指定线段区间完全覆盖。
acwing 907
按照左端点进行排序,然后在区间中找到左端点小于等于s,并且右端点最大的区间。找到之后,更新当前最右的区间值。
(4)区间合并问题
先左端点排序,然后设置一个st与ed的初始值,如果当前的区间的左端点大于ed,那么就将st与ed加入到list集合中。
更新st与ed的值,此时值为当前区间的左右端点。如果当前区间的左端点小于等于ed,那么就需要更新ed,此时ed为ed=Math.max(ed,curpolit[1]);
最后当st不是初始值的时候,将此时的st与ed加入到list集合中。
(5)哈夫曼树
每次弹出队头的前面两个元素,然后相加之后再放回到原来的优先队列之中。
贪心问题:
leetcode:406 135分发糖果
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值