You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

算法作业求助:删除K个区间后最大化剩余区间覆盖点数

解题思路提示
  1. 区间排序与预处理

    • 先将所有区间按右端点从小到大排序,这是后续处理的核心前提。
    • 计算每个区间的覆盖点数:对于区间[l, r],覆盖点数为r - l + 1,记为该区间的长度。
  2. 快速查找非重叠前驱

    • 对每个区间i,用二分查找找到最后一个与i不重叠的区间prev[i](即右端点 ≤ i的左端点的最大区间索引)。由于区间已按右端点排序,这一步可以在O(NlogN)时间内完成。
  3. 动态规划+单调队列优化

    • 定义状态dp[j][i]:前i个区间中删除j个,且保留第i个区间时的最大覆盖点数。最终答案是所有dp[j][i](j ≤ K)中的最大值。
    • 状态转移分两种场景:
      • 若保留的第i个区间与之前保留的区间无重叠:此时需从prev[i]之前的区间中选择,转移时取dp[j-d][k] - r[k]的最大值(d为中间删除的区间数,k为之前保留的区间索引),再加上当前区间的右端点r[i]。
      • 若保留的第i个区间与之前保留的区间有重叠:此时取dp[j-d][k]的最大值,加上当前区间的长度。
    • 用单调队列维护每种j对应的最大值,将时间复杂度从O(N*K²)优化到O(N*K),适配N=1e5、K=100的规模。
  4. 关键注意点

    • 贪心算法(按起点、终点、长度排序)无法保证全局最优,因为删除K个区间的选择需要权衡全局重叠情况,局部最优不一定能得到全局最大覆盖。

内容的提问来源于stack exchange,提问作者guitarMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:45:57