मान लीजिए कि हमारे पास अंतराल की एक सूची है जहां प्रत्येक अंतराल [प्रारंभ, अंत) जैसा है और हमारे पास प्रकार नामक तारों की एक सूची भी है। अब किसी दिए गए i के लिए, अंतराल [i] उस समय को दर्शाता है जब किसी ने नौकरी के प्रकारों पर काम किया [i] [शुरू, अंत से)। एक ही प्रकार के दो अंतराल कभी भी ओवरलैप या स्पर्श नहीं करते हैं। इसलिए हमें एक क्रमबद्ध मर्ज की गई सूची ढूंढनी होगी जहां प्रत्येक आइटम में [प्रारंभ, अंत, num_types] है, जो प्रारंभ से अंत तक इंगित करता है, num_types कार्यों की संख्या पर काम किया जा रहा था।
इसलिए, यदि इनपुट अंतराल =[[0, 3], [5, 7], [0, 7]] प्रकार =["समस्या समाधान", "समाचार", "गेम प्ले"] की तरह है, तो आउटपुट होगा हो [[0, 3, 2], [3, 5, 1], [5, 7, 2]], क्योंकि हमारे पास कुछ प्रकार के कार्य किए जा रहे हैं:[0, 3 के बीच] "समस्या समाधान" और " गेम प्ले", [3, 5) के बीच "गेम प्ले" और [5, 7) के बीच "न्यूज़" और "गेम प्ले"।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
ev :=एक नई सूची
-
प्रत्येक अंतराल के लिए अंतराल में अंत जोड़ी (एस, ई) प्रारंभ करें, करें
-
ev के अंत में (s, 1) डालें
-
ev के अंत में (e, −1) डालें
-
-
सूची को क्रमबद्ध करें
-
cnt :=0, अंतिम :=−1
-
उत्तर :=एक नई सूची
-
प्रत्येक बार और घटनाओं के वृद्धि पैरामीटर (t, inc) के लिए ev, do
-
यदि t पिछले के समान नहीं है और cnt 0 के समान नहीं है, तो
-
सीएनटी:=सीएनटी + इंक
-
-
अंतिम:=टी
-
-
वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def solve(self, intervals, jobs): ev = [] for s, e in intervals: ev.append((s, 1)) ev.append((e, −1)) ev.sort() cnt = 0 last = −1 ans = [] for t, inc in ev: if t != last and cnt != 0: ans.append([last, t, cnt]) cnt += inc last = t return ans ob = Solution() intervals = [ [0, 3], [5, 7], [0, 7] ] types = ["problem solving", "news", "game play"] print(ob.solve(intervals, types))
इनपुट
[[0, 3],[5, 7],[0, 7]], ["problem solving", "news", "game play"]
आउटपुट
[[0, 3, 2], [3, 5, 1], [5, 7, 2]]