贪心算法-射击气球

什么是贪心算法

贪心算法不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优选择。使用贪心策略要注意局部最优与全局最优的关系,选择当前的局部最优并不一定能推导出问题的全局最优。贪心策略解题需要解决以下两个问题:

1、该问题是否适合使用贪心策略求解,也就是该问题是否具有贪心选择性质 。

2、制定贪心策略,以达到问题的最优解或较优解。

要确定一个问题是否适合用贪心算法求解,必须证明每一步所作的贪心选择最终导致问题的整体最优解。证明的大致过程为:首先考察问题的一个整体最优解,并证明可修改这个最优解,使其以贪心选择开始,做了贪心选择后,原问题简化为规模更小的类似子问题。然后用数学归纳法证明通过每一步做贪心选择,最终可得到问题的整体最优解 。

Leetcode452-射击气球

题目描述:

题目链接

在这里插入图片描述

解题框架:

在这里插入图片描述

解题思路:

  1. 先分析整体,为了尽可能射击到更多的气球,故将气球的各个区间尽可能相交。

  2. 所以可按照左端点对区间进行排序,然后从左往右扫描最优情况。

  3. 由于只用到射击区间的右端点来进行比较,所以我们可以忽略射击区间左端点这个变量。所以我们只需更新右端点的位置即可。

最优情况的整体思路流程图:

Created with Raphaël 2.2.0 开始执行 一个一个的气球区间进行遍历,并利用左右端点进行判断 区间是否相交(是或否?) 将用于判断的右端点更新为更小的一个 子问题是否处理完(是或否) 返回所用弓箭数 结束 则子问题得出最优解,所用弓箭数+1,并更新为下一个区间的右端点 yes no yes no

在这里插入图片描述

解题代码:

解决问题的Solution类(注意sort函数的使用)

在这里插入图片描述

main函数测试程序接口

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值