Leetcode 1024. 视频拼接

文章目录

  • 问题描述
  • 解题报告
  • 实现代码

问题描述

Leetcode 1024. 视频拼接_第1张图片

解题报告

d p [ i ] dp[i] dp[i] 表示剪辑到时间点 i i i 所需要的最少碎片。所以我们可以得到如下的公式:
d p [ i ] = m i n ( d p [ i ] , d p [ v [ 0 ] ] + 1 ) v [ 0 ] 表 示 对 所 有 的 视 频 片 段 进 行 遍 历 , 取 每 个 片 段 的 开 始 点 dp[i]=min(dp[i],dp[v[0]]+1)\\ v[0]表示对所有的视频片段进行遍历,取每个片段的开始点 dp[i]=min(dp[i],dp[v[0]]+1)v[0]
这种推导公式要求剪辑片段是有序的。如若剪辑片段是无序的,那么在计算 d p [ i ] dp[i] dp[i] 时,若 d p [ v [ 0 ] ] dp[v[0]] dp[v[0]] 目前还未达,即仍是初始值 10000 10000 10000, 则不能达到更新目的。

实现代码

class Solution{
    public:
        int videoStitching(vector<vector<int>>& clips,int T){
            sort(clips.begin(),clips.end());
            if(clips[0][0]!=0)
                return -1;
            vector<int>dp(T+1,10000);
            dp[0]=0;
            for(int i=1;i<=T;i++){
                for(auto& v:clips){
                    if(v[0]<=i && v[1]>=i){
                        dp[i]=min(dp[i],dp[v[0]]+1);
                    }
                }
            }
            return (dp[T]==10000)?-1:dp[T];
        }
};

你可能感兴趣的:(leetcode,动态规划)