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

পাইথনে পজিটিভ প্রডাক্ট যুক্ত সাবঅ্যারের সর্বোচ্চ দৈর্ঘ্য নির্ণয়

একটি অ্যারে nums দেওয়া থাকলে, যার প্রডাক্ট পজিটিভ হয় এমন সাবঅ্যারের সর্বোচ্চ দৈর্ঘ্য খুঁজে বের করতে হবে।

উদাহরণ:

ইনপুট: nums = [2,-2,-4,5,-3]

আউটপুট: 4 কারণ প্রথম চারটি উপাদান [2,-2,-4,5] এর প্রডাক্ট পজিটিভ (৮০)।

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

  1. হেল্পার ফাংশন util(s, e) ডিফাইন করুন যা সাবঅ্যারে nums[s:e+1]-এ কাজ করে:
    • নেগেটিভ সংখ্যা গণনা করুন (neg)
    • প্রথম এবং শেষ নেগেটিভের ইনডেক্স সংরক্ষণ করুন (ns, ne)
    • যদি neg জোড় (या শূন্য) হয়: পুরো সাবঅ্যারের দৈর্ঘ্য রিটার্ন করুন
    • অন্যথায়: max(e-ns, ne-s) রিটার্ন করুন (প্রথম বা শেষ নেগেটিভ বাদ দিয়ে)
  2. মূল ফাংশনে:
    • শূন্য দিয়ে অ্যারে বিভক্ত করুন (প্রডাক্ট শূন্য হলে পজিটিভ হয় না)
    • প্রতিটি নন-জিরো সেগমেন্টের জন্য util() কল করুন
    • সর্বোচ্চ দৈর্ঘ্য ট্র্যাক করুন

পাইথন কোড:

def util(s, e):
    neg = 0
    ns, ne = -1, -1
    for i in range(s, e+1):
        if nums[i] < 0:
            neg += 1
            if ns == -1:
                ns = i
            ne = i
    if neg == 0 or neg % 2 == 0:
        return e - s + 1
    else:
        return max(e - ns, ne - s)

def solve(nums):
    ans = 0
    s, e = -1, -1
    for i in range(len(nums)):
        if nums[i] != 0 and s == -1:
            s = i
        elif nums[i] == 0 and s != -1:
            e = i - 1
            ans = max(ans, util(s, e))
            s, e = -1, -1
    if s != -1 and e == -1:
        e = len(nums) - 1
        ans = max(ans, util(s, e))
    return ans

nums = [2, -2, -4, 5, -3]
print(solve(nums))  # আউটপুট: 4

টেস্ট কেস:

ইনপুট: [2,-2,-4,5,-3]

আউটপুট: 4

টাইম কমপ্লেক্সিটি:

O(n) - লিনিয়ার টাইম, কারণ অ্যারেটি একবার ট্রাভার্স করা হয়।

  1. পাইথন ব্যবহার করে সর্বোচ্চ সম্ভাবনার পথ খুঁজে বের করার প্রোগ্রাম

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

  3. পাইথনে N-এর চারটি ফ্যাক্টর বের করা যাতে যোগফল N এবং গুণফল সর্বাধিক

  4. পাইথনে Maximum Product Subarray (সর্বাধিক গুণফলযুক্ত সাবঅ্যারে)