糖逗 发表于 2021-1-6 11:33:50

C++刷LeetCode(1024. 视频拼接)【贪心算法】【递归】

题目描述:
你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。

视频片段 clips 都用区间进行表示:开始于 clips 并于 clips 结束。我们甚至可以对这些片段自由地再剪辑,例如片段  可以剪切成  +  +  三部分。

我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段()。返回所需片段的最小数目,如果无法完成该任务,则返回 -1 。

 

示例 1:

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

输入:clips = [,], T = 5
输出:-1
解释:
我们无法只用 和 覆盖 的整个过程。
示例 3:

输入:clips = [,,,,,,,,,,,,,,,], T = 9
输出:3
解释:
我们选取片段 , 和 。
示例 4:

输入:clips = [,], T = 5
输出:2
解释:
注意,你可能录制超过比赛结束时间的视频。
 

提示:

1 <= clips.length <= 100
0 <= clips <= clips <= 100
0 <= T <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/video-stitching
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。



class Solution {
public:
    void currsion(int&res, vector<vector<int> >&clips, int end, vector<int>& visit){
      if(end == 0)return;
      int temp = -1;
      int interval = INT_MIN;
      for(int i = 0; i < clips.size(); i++){
            if(visit == 0){
                if(clips <= end && clips >= end){
                  if(end - clips > interval){
                        interval = end - clips;
                        temp = i;
                  }
                }
            }
      }
      if(temp != -1){
            visit = 1;
            res++;
            currsion(res, clips, clips, visit);
      }else{
            res = -1;
            return;
      }
    }
    int videoStitching(vector<vector<int>>& clips, int T) {
      if(T == 0)return 0;
      int len = clips.size();
      bool temp1 = false, temp2 = false;
      for(int i = 0; i < len; i++){
            if(clips == 0)temp1 = true;
            if(clips >= T || clips >= T)temp2 = true;
      }
      if(temp1 == false || temp2 == false)return -1;
      int res = 0;
      vector<int>visit(len, 0);
      currsion(res, clips, T, visit);
      return res;
    }
};
页: [1]
查看完整版本: C++刷LeetCode(1024. 视频拼接)【贪心算法】【递归】