登长城了!

“不到长城非好汉”仅此而已! 偷笑
这道题目可以使用二分答案 + 贪心的方法来解决。 首先思考二分答案的具体实现。我们可以二分一个答案ans,然后判断是否存在一种方案,使得最多只需要修改K个烽火台,就能让连续的烽火台的长度都大于等于ans。具体的实现方法是,从左到右遍历烽火台,如果当前烽火台与上一个烽火台状态相同,那么当前连续的长度+1,否则重新开始计数。如果当前连续的长度已经达到了ans,那么我们就需要修改当前的烽火台状态,使得下一个烽火台与当前的状态不同,从而避免出现连续的长度大于等于ans的情况。 接下来考虑如何判断是否存在一种方案。我们可以使用贪心的思想,从左到右遍历烽火台,维护两个指针l和r,表示当前区间[l,r]内的连续烽火台状态相同。如果当前烽火台状态与区间[l,r]内的状态相同,那么我们将r向右移动,否则我们将l向右移动。如果当前区间长度已经大于等于ans,那么我们就需要修改区间内的一个烽火台状态,使得区间长度缩小到小于ans。具体的实现方法是,如果区间内的左端点l与左边的烽火台状态相同,那么我们就将左端点向右移动,否则我们就将右端点向左移动。 最后,我们将上述二分答案和贪心的实现结合起来,即可得到最终的解法。时间复杂度为O(N log N log C),其中C为状态数,即烽火台状态的种类数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值