美文网首页
1024. 视频拼接

1024. 视频拼接

作者: 风卷晨沙 | 来源:发表于2019-07-17 14:44 被阅读0次

    1.题目

    视频拼接 - 力扣(LeetCode) https://leetcode-cn.com/problems/video-stitching/

    2.题解

    首先,先准备一个dp数组,给后面存放状态使用。之后给clips数组进行排序,return o1-o2;代表交换位置。然后遍历这个视频碎片数组,排除不符合要求的情况。对于目标碎片,则分为两类,分别是以0开始的碎片段和其他碎片段两类。分别计算出对于dp数组中储存的值。
    如果拼接成功,dp[T]的值就是目标结果,不成功则输出-1。

    3.代码

    //视频拼接的逻辑
        class Solution {
            public int videoStitching(int[][] clips, int T) {
            
                // 状态量,用于记录到达对应时间点所需的最少碎片数
                int[] dp = new int[T + 1];
                // 根据视频碎片的起点来排序
                Arrays.sort(clips, new Comparator<int[]>() {
                    @Override
                    public int compare(int[] o1, int[] o2) {
                        return o1[0] - o2[0];
                    }
                });
                // 遍历所有视频碎片
                for (int[] k : clips) {
                    // 当视频碎片不在我们要的时间范围内时,直接跳过
                    if (k[0] >= dp.length){
                         continue;
                    }
                    // 视频碎片没有办法连续,直接跳出返回 -1
                    if (k[0] != 0 && dp[k[0]] == 0){
                         return -1;
                    }
                    // 当视频碎片的末端超过我们要求的时间,进行裁剪
                    if (k[1] >= dp.length){
                        k[1] = dp.length - 1; 
                    }
                    // 将视频碎片分为两类
                    if (k[0] == 0) {
                        // 从 0开始的,直接范围内的时间都置为 1个碎片可达
                        for (int i = k[0]; i <= k[1]; i++) {
                            dp[i] = 1;
                        }
                    } else {
                        // 其他碎片段,判断新的碎片能否带来更少的所需碎片
                        int temp = dp[k[0]] + 1;
                        for (int i = k[0]; i <= k[1]; i++) {
                            if (dp[i] == 0 || dp[i] > temp) {
                                dp[i] = temp;
                            }
                        }
                        
                    }
                }
                // dp[T]为 0意味着未能到达 T点,因此未能拼接成功
                return dp[T] == 0? -1: dp[T];
                
            }
        }
    

    4.执行结果

    image.png

    相关文章

      网友评论

          本文标题:1024. 视频拼接

          本文链接:https://www.haomeiwen.com/subject/eoyqlctx.html