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

পাইথনে ইউনিক এলিমেন্টসহ কনsekutিভ সাবলিস্টের সর্বোচ্চ দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

একটি সংখ্যার তালিকা nums দেওয়া আছে যেখানে সব উপাদান ইউনিক। এমন সবচেয়ে লম্বা সাবলিস্ট খুঁজে বের করতে হবে যার সব উপাদান কনsekutিভ (যেমন ৩,৪,৫,৬,৭)। অর্ডার যেকোনো হতে পারে, শুধু মানগুলো কনsekutিভ হবে।

উদাহরণ: nums = [3, 6, 7, 5, 4, 9] হলে আউটপুট 5। কারণ সাবলিস্ট [3, 6, 7, 5, 4] মানের পরিসর ৩ থেকে ৭ (৫টি কনsekutিভ সংখ্যা) কভার করে।

সমাধানের পদ্ধতি

ব্রুট-ফোর্স O(n²) পদ্ধতি: প্রতিটি সাবলিস্টের জন্য ন্যূনতম (lhs) এবং সর্বোচ্চ (rhs) মান ট্র্যাক করুন। যদি rhs - lhs == j - i হয়, তবে সাবলিস্টের উপাদানগুলো কনsekutিভ।

পাইথন কোড

def solve(nums):
    ret = 0
    n = len(nums)
    for i in range(n):
        lhs = nums[i]
        rhs = nums[i]
        for j in range(i, n):
            lhs = min(lhs, nums[j])
            rhs = max(rhs, nums[j])
            # কনsekutিভ শর্ত: max - min == length - 1
            if rhs - lhs == j - i:
                ret = max(ret, j - i + 1)
    return ret

# টেস্ট
nums = [3, 6, 7, 5, 4, 9]
print(solve(nums))  # আউটপুট: 5

দ্রষ্টব্য

মূল আর্টিকেলের আউটপুটে 1 দেখায়, যা ভুল। সঠিক আউটপুট 5 হওয়া উচিত। উপরের কোডটি সঠিক ফলাফল দেবে।

সময় জটিলতা

O(n²) - নেস্টেড লুপ। অপ্টিমাইজড সমাধান HashSet ব্যবহার করে O(n) সম্ভব।

  1. পাইথনে বাইনারি ট্রির লংগেস্ট কনsekutিভ পথের দৈর্ঘ্য বের করার প্রোগ্রাম

  2. পাইথনে স্বতন্ত্র উপাদান সম্বলিত সর্বোচ্চ দীর্ঘ সাবলিস্টের দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে অক্রমাগত অ্যারেতে সর্বোচ্চ ক্রমাগত সিকোয়েন্সের দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে একই ক্যারেক্টার ধারণকারী সাবস্ট্রিংর সর্বোচ্চ দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম