力扣452 用最少的箭引爆气球(个人感悟向,非完整代码)

这个题是在有了贪心算法的预设下做的,没做出来, 去看了两种题解,官方的和评论区大佬的。

在此之前我已知道一点点如果利用排序或其他方法先对数据进行预处理的话会使题目变得简单,但是这个题我不知道如何排序,以什么为基准排序。

贪心是局部最优到全局最优,那么这个局部最优肯定是每一只箭都引爆尽可能多的气球,根据题意,这个也是全局最优。

官方再给出思路的时候使用了画图这个方法,这是一个优秀的方法,我没有想到;其次是第三张图这个“临界点”的思想给了我很大触动,忽然想起来高中数学圆锥曲线部分的切线斜率问题,也是不断旋转某直线到达两个切点,这两个切点就是斜率区间的左右两端,就是讲究一个“恰好相切”的平衡,和这个题非常相像,我愿称之为找切点问题plus

接下来的事是如何判断区间有重叠部分并转化成计算机语言,如果还是像上高中那时画一维平面图确实不好看,所以题解里的二维图更好。

如果区间杂乱无章,那么可想而知遍历、判断的次数会很多,所以要先排序,那以什么排序?首先排除区间长度,这个因子抹去了区间的位置关系;

那么能不能以区间的左端点为基准判断?我认为可以,如果以左区间大小进行升序排序的话,如果以后的区间的左端点 <= 基准区间的右端点的话说明重合,一旦>右端点,说明这是全新的区间,箭数目+1,同时更新基准区间即可;

如果以右端点为基准升序排序同理,如果其余区间的左端点 <= 基准区间的右端点,说明重合了,操作相同。

————————————————

还看了另外一种思路我觉得也很好,在这里:

 做了两个题,都是以右端点排序的,那是不是这是一种可以成框架的思路?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值