मान लीजिए कि हमारे पास टी सेकंड तक चलने वाले खेल आयोजन से वीडियो क्लिप की एक श्रृंखला है। अब ये वीडियो क्लिप एक-दूसरे से ओवरलैप हो सकते हैं और इनकी लंबाई अलग-अलग हो सकती है। यहां प्रत्येक वीडियो क्लिप क्लिप [i] एक अंतराल है - यह क्लिप [i] [0] समय पर शुरू होती है और क्लिप [i] [1] समय पर समाप्त होती है। हम इन क्लिप को खंडों में स्वतंत्र रूप से काट सकते हैं - हमें आवश्यक क्लिप की न्यूनतम संख्या का पता लगाना होगा ताकि हम क्लिप को उन खंडों में काट सकें जो पूरे खेल आयोजन ([0, टी]) को कवर करते हैं। यदि कार्य असंभव है, तो वापसी -1। तो अगर इनपुट [[0,2], [4,6], [8,10], [1,9], [1,5], [5,9]], और टी =10 की तरह है, तो आउटपुट 3 होगा, जैसा कि हम क्लिप [0,2], [8,10] और [1,9], कुल 3 क्लिप ले सकते हैं, फिर हम खेल आयोजन को निम्नानुसार फिर से संगठित कर सकते हैं, हम [1,] 9] खंडों में [1,2] + [2,8] + [8,9]। अब हमारे पास खंड [0,2] + [2,8] + [8,10] हैं जो खेल आयोजन [0, 10] को कवर कर रहे हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
T + 1 आकार का एक सरणी v बनाएं और इसे - 1 से भरें
-
n :=क्लिप का आकार
-
मैं के लिए 0 से n - 1 की सीमा में
-
अगर क्लिप[i, 0]> T, तो अगले पुनरावृत्ति पर जाएं
-
v[क्लिप्स[i, 0]] :=अधिकतम v[क्लिप्स[i, 0]] और न्यूनतम (क्लिप[i, 1] और T)
-
-
वर्तमान:=वी[0]
-
अगर v[0] -1 है, तो -1 लौटें
-
मैं :=1 , रिट :=1 और अगला :=0
-
जबकि करंट <टी और मैं <=n
-
जबकि मैं <=curr
-
अगला:=अगले का अधिकतम और v[i]
-
1 से बढ़ाएँ
-
-
अगर अगला =curr और अगला -1 है, तो वापसी -1
-
वर्तमान:=अगला
-
-
वापसी रिट जब curr>=T, अन्यथा वापसी – 1
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int videoStitching(vector<vector<int>>& clips, int T) {
vector <int> v(T + 1, -1);
int n = clips.size();
for(int i = 0; i < n; i++){
if(clips[i][0] > T)continue;
v[clips[i][0]] = max(v[clips[i][0]], min(clips[i][1],
T));
}
int curr = v[0];
if(v[0] == -1)return -1;
int i = 1;
int ret = 1;
int next = 0;
while(curr < T && i <= n){
while(i <= curr){
next = max(next, v[i]);
i++;
}
if(next == curr || next == -1) return -1;
curr = next;
ret++;
}
return curr >= T? ret : -1;
}
};
main(){
vector<vector<int>> v1 = {{0,2},{4,6},{8,10},{1,9},{1,5},{5,9}};
Solution ob;
cout << (ob.videoStitching(v1, 10));
} इनपुट
[[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]] 10
आउटपुट
3