leetcode 1024. 视频拼接

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

这道题和以前做过的一道跳台阶的题目比较像,可以用贪心算法来做。只是注意判断条件的设置。

public static int videoStitching(int[][] clips, int T) {
        Arrays.sort(clips,((o1, o2) -> o1[0]-o2[0]));
        int count=1;
        int end=0;
        int i=0;
        int begin=0;
        while(i<clips.length&&end<T){
            if(clips[i][0]>begin&&clips[i][1]>end){
                if(clips[i][0]>end){ //如果超过当前最右边界,说明不可完成
                    break;
                }
                count++;
                begin=end;
            }
            end=Math.max(end,clips[i][1]);
            i++;
        }
        return end<T?-1:count;
    }

你可能感兴趣的:(刷题)