ধরুন আমাদের কাছে একটি ব্যবধানের তালিকা রয়েছে যেখানে প্রতিটি ব্যবধান যেমন [শুরু, শেষ) এবং আমাদের কাছে স্ট্রিংগুলির একটি তালিকা রয়েছে যাকে টাইপ বলা হয়। এখন একটি প্রদত্ত i এর জন্য, ব্যবধান[i] দেখায় যে কেউ [শুরু, শেষ) থেকে কাজের ধরনগুলিতে কতবার কাজ করেছে। একই ধরণের দুটি ব্যবধান কখনই ওভারল্যাপ বা স্পর্শ করে না। তাই আমাদের একটি সাজানো মার্জ করা তালিকা খুঁজে বের করতে হবে যেখানে প্রতিটি আইটেমের [start, end, 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 :=একটি নতুন তালিকা
-
প্রতিটি ব্যবধানের জন্য শুরুর শেষ জোড়া (s, e) বিরতিতে, করুন
-
ev
এর শেষে (s, 1) সন্নিবেশ করুন -
ev
এর শেষে সন্নিবেশ করুন (e, −1)
-
-
তালিকাটি সাজান ev
-
cnt :=0, শেষ :=−1
-
উত্তর :=একটি নতুন তালিকা
-
ev, do
-এ প্রতিটি সময় এবং ইভেন্টের (t, inc) বৃদ্ধির প্যারামিটারের জন্য-
যদি t শেষের মত না হয় এবং cnt 0 এর মত না হয়, তাহলে
-
cnt :=cnt + inc
-
-
শেষ :=t
-
-
উত্তর ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
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]]