1024. 视频拼接
你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。
视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 clips[i][1] 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。
我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, T])。返回所需片段的最小数目,如果无法完成该任务,则返回 -1 。
思路
动态规划
可以令dp[i]表示[0, i)区间内需要的最少片段数,枚举i,然后判断每一个片段开头是否在时间点i之前,在的话就可以更新dp[i] = min(dp[i], dp[clip[0]] + 1),最后返回dp[T]即可。
代码
class Solution {
public:
int videoStitching(vector<vector<int>>& clips, int T) {
vector<int> dp(T + 1, INT_MAX - 1);
dp[0] =