কম্পিউটার টিউটোরিয়াল

পাইথনে দুটি ইন্টারভাল লিস্টের ওভারল্যাপিং অংশ বের করে সর্টেড রিটার্ন করার প্রোগ্রাম


মান লক্ষ্য করুন আমাদের কাছে ক্লোজড ইন্টারভালের একটি তালিকা এবং অন্য একটি ইন্টারভালের তালিকা আছে। প্রতিটি তালিকা নিজে নিজে নন-ওভারল্যাপিং এবং নন-ডিক্রিজিং অর্ডারে সর্টেড। আমাদের কাজ হল এই দুটি ইন্টারভাল লিস্টের ওভারল্যাপ (অন্তর্ভুক্ত অংশ) বের করে নন-ডিক্রিজিং অর্ডারে রিটার্ন করা।

উদাহরণস্বরূপ, যদি ইনপুট হয় inv1 = [[50, 100],[190, 270],[310, 330]] এবং inv2 = [[40, 120],[180, 190]], তবে আউটপুট হবে [[50, 100], [190, 190]]।

সমাধানের ধাপসমূহ:
  • ans := []
  • i := 0, j := 0
  • i < len(A) এবং j < len(B) হলে লুপ চালান:
    • start := max(A[i][0], B[j][0])
    • end := min(A[i][1], B[j][1])
    • যদি start <= end হয়, তবে [start, end] কে ans-এ ঢুকান।
    • যদি A[i][1] < B[j][1] হয়, তবে i += 1, অন্যথায় j += 1
  • ans রিটার্ন করুন।
উদাহরণ কোড
class Solution:
    def solve(self, A, B):
        ans = []
        i = 0
        j = 0
        while i < len(A) and j < len(B):
            start = max(A[i][0], B[j][0])
            end = min(A[i][1], B[j][1])
            if start <= end:
                ans.append([start, end])
            if A[i][1] < B[j][1]:
                i += 1
            else:
                j += 1
        return ans

ob = Solution()
inv1 = [[50, 100],[190, 270],[310, 330]]
inv2 = [[40, 120],[180, 190]]
print(ob.solve(inv1, inv2))
ইনপুট
[[50, 100],[190, 270],[310, 330]], [[40, 120],[180, 190]]
আউটপুট
[[50, 100], [190, 190]]
  1. পাইথনে তালিকাকে আরোহী বা অবরোহী ক্রমে সাজাতে ন্যূনতম খরচ খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে ইউনিক অ্যারেতে কনটিগুয়াস ইন্টারভাল খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে লিস্টে k এবং -k উভয়ই আছে এমন সর্বোচ্চ k বের করার প্রোগ্রাম

  4. পাইথনে ইন্টারভালের ইন্টারসেকশন (Intersecting Intervals) বের করার প্রোগ্রাম