leetcode1024(视频拼接:贪心算法)

给定一系列体育赛事视频片段,需要通过再剪辑拼接成完整覆盖整个赛事的片段。此问题可以通过贪心算法解决,优先选择覆盖范围更大的片段。首先预处理找到每个位置的最远子区间右端点,然后从左到右遍历,用指针更新最大覆盖范围,若无法覆盖所有位置则返回-1。
摘要由CSDN通过智能技术生成

你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。
视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 clips[i][1] 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。
我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, T])。返回所需片段的最小数目,如果无法完成该任务,则返回 -1 。

示例 1:
输入:clips = [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]], T = 10
输出:3
解释:
我们选中 [0,2], [8,10], [1,9] 这三个片段。
然后,按下面的方案重制比赛片段:
将 [1,9] 再剪辑为 [1,2] + [2,8] + [8,9] 。
现在我们手上有 [0,2] + [2,8] + [8,10],而这些涵盖了整场比赛 [0, 10]。

题解:贪心算法,分析题目后可以发现这道题的本质是找出能覆盖长度为T的区间的最小区间集合数。要使区间集合数最小,则对于起点相同的子区间,我们要优先选择长度更长的区间,于是我们需要预处理子区间,用数组 int maxEdge[ i ] 记录对于每一个位置i,其最远子区间的右端点maxEdge[ i ]。
预处理完后,我们就可以采用贪心算法,我们枚举长度为T的区间的每一个位置i,用一个指针edge更新左端点不大于i的所有区间可以取得的最大右端点,每当我们枚举到一个新位置时,我们用maxEdge[ i ]来更新指针edge,如果当枚举到某个位置满足i==edge时,说明不存在区间可以覆盖当前位置,则返回-1。我们还需要一个指针lastEdge指向当前区间的右端点,当i = = ==

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值