ধরুন আমাদের কাছে ব্যবধান নামে একটি 2D সংখ্যার তালিকা রয়েছে যেখানে প্রতিটি সারি [শুরু, শেষ] (অন্তর্ভুক্ত) ব্যবধানকে প্রতিনিধিত্ব করে। একটি ব্যবধানের জন্য [a, b] (a
সুতরাং, যদি ইনপুটটি ইন্টারভালের মত হয় =[[15, 20],[30, 50]], তাহলে আউটপুট হবে 10, কারণ আমরা ব্যবধান [20, 30] যোগ করতে পারি যা সম্ভাব্য সবচেয়ে ছোট ব্যবধান।পি>
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ইভেন্ট :=একটি নতুন তালিকা
- প্রতিটি শুরু এবং শেষ সময়ের জন্য s, e বিরতিতে, করুন
- ইভেন্টের শেষে (s, 1) সন্নিবেশ করুন
- ইভেন্টের শেষে সন্নিবেশ (e, -1) করুন
- তালিকা ইভেন্টগুলি সাজান
- curr_status :=0, last :=null
- ব্যবধান :=একটি জোড়া [0, 0]
- ইভেন্টে প্রতিটি জোড়ার (সময়, অবস্থা) জন্য, করুন
- যদি curr_status 0 এবং last এবং time> last এর মত হয়, তাহলে
- যদি ব্যবধান[0] 0 এর সমান হয়, তাহলে
- ব্যবধান[0] :=শেষ
- ব্যবধান[1] :=সময়
- যদি ব্যবধান[0] 0 এর সমান হয়, তাহলে
- শেষ :=সময়
- curr_status :=curr_status + স্থিতি
- যদি curr_status 0 এবং last এবং time> last এর মত হয়, তাহলে
- রিটার্ন ইন্টারভাল[1] - ইন্টারভাল[0]
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def solve(self, intervals): events = [] for s, e in intervals: events.append((s, 1)) events.append((e, -1)) events.sort() curr_status = 0 last = None interval = [0, 0] for time, status in events: if curr_status == 0 and last and time > last: if interval[0] == 0: interval[0] = last interval[1] = time last = time curr_status += status return interval[1] - interval[0] ob = Solution() intervals = [[15, 20],[30, 50]] print(ob.solve(intervals))
ইনপুট
[[15, 20],[30, 50]]
আউটপুট
10