ধরুন আমাদের কাছে একটি ব্যবধানের তালিকা আছে যেখানে প্রতিটি ব্যবধান আকারে আছে [শুরু, শেষ]। যেকোন সংখ্যক ওভারল্যাপিং ব্যবধানকে একত্রিত করে আমরা দীর্ঘতম ব্যবধানটি খুঁজে বের করতে পারি।
সুতরাং, যদি ইনপুটটি [[1, 6],[4, 9],[5, 6],[11, 14],[16, 20]] এর মত হয়, তাহলে আউটপুট হবে 9, মার্জ করার পরে, আমাদের একটি দৈর্ঘ্য 9 এর ব্যবধান [1, 9] আছে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- তালিকা ব্যবধান বাছাই
- ইউনিয়ন :=ব্যবধান তালিকা থেকে প্রথম ব্যবধান
- সর্বোত্তম :=ইউনিয়ন[শেষ] - ইউনিয়ন[শুরু] + 1
- প্রথমটি ব্যতীত প্রতিটি শুরুর সময় s এবং শেষের সময় e এর জন্য, করুন
- যদি s <=union[end] হয়, তাহলে
- ইউনিয়ন[এন্ড] :=সর্বাধিক ইউনিয়ন[এন্ড] এবং ই
- অন্যথায়,
- ইউনিয়ন :=একটি নতুন ব্যবধান [s, e]
- সর্বোত্তম :=সর্বোত্তম এবং ইউনিয়ন[শেষ] - ইউনিয়ন[শুরু] + 1
- যদি s <=union[end] হয়, তাহলে
- সর্বোত্তম রিটার্ন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
শ্রেণির সমাধান:def solve(self, intervals):intervals.sort() union =intervals[0] best =union[1] - union[0] + 1 এর জন্য s, e in intervals[1:]:if s <=union[1]:union[1] =max(union[1], e) else:union =[s, e] best =max(best, union[1] - union[0] + 1) রিটার্ন bestob =সমাধান()ব্যবধান =[[1, 6],[4, 9],[5, 6],[11, 14],[16, 20]]print(ob.solve(intervals))
ইনপুট
<প্রে>[[1, 6],[4, 9],[5, 6],[11, 14],[16, 20]]আউটপুট
9