মান ল করুন intervals নামের একটি ২D সংখ্যার তালিকা যেখানে প্রতিটি সারি [start, end] (ইনক্লুসিভ) ইন্টারভাল বোঝায়। একটি ইন্টারভাল [a, b] (a < b) এর সাইজ হল (b - a)। আমাদের দিয়ে गये লিস্টে একটি ইন্টারভাল যোগ করতে হবে যাতে সব ইন্টারভাল মার্জ করার পর ঠিক একটি রেঞ্জ বäche। যোগ করা ইন্টারভালের ন্যূনতম সম্ভাব্য সাইজ খুঁজে বের করতে হবে।
যদি ইনপুট হয় intervals = [[15, 20],[30, 50]], তবে আউটপুট হবে ১০, কারণ আমরা [20, 30] ইন্টারভালটি যোগ করতে পারি যা ন্যূনতম সম্ভাব্য।
এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব:
- events := একটি নতুন তালিকা
- intervals-এ থাকা প্রতিটি (s, e) জন্য:
- (s, 1) events-এ যোগ করুন
- (e, -1) events-এ যোগ করুন
- events তালিকাটি সাজান
- curr_status := 0, last := null
- interval := [0, 0]
- events-এ থাকা প্রতিটি (time, status) জন্য:
- যদি curr_status == 0 এবং last থাকে এবং time > last, তবে:
- যদি interval[0] == 0, interval[0] := last
- interval[1] := time
- last := time
- curr_status := curr_status + status
- যদি curr_status == 0 এবং last থাকে এবং time > last, তবে:
- interval[1] - interval[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