একটি অ্যারে nums দেওয়া থাকলে, যার প্রডাক্ট পজিটিভ হয় এমন সাবঅ্যারের সর্বোচ্চ দৈর্ঘ্য খুঁজে বের করতে হবে।
উদাহরণ:
ইনপুট: nums = [2,-2,-4,5,-3]
আউটপুট: 4 কারণ প্রথম চারটি উপাদান [2,-2,-4,5] এর প্রডাক্ট পজিটিভ (৮০)।
সমাধানের পদ্ধতি:
- হেল্পার ফাংশন
util(s, e)ডিফাইন করুন যা সাবঅ্যারেnums[s:e+1]-এ কাজ করে:- নেগেটিভ সংখ্যা গণনা করুন (
neg) - প্রথম এবং শেষ নেগেটিভের ইনডেক্স সংরক্ষণ করুন (
ns,ne) - যদি
negজোড় (या শূন্য) হয়: পুরো সাবঅ্যারের দৈর্ঘ্য রিটার্ন করুন - অন্যথায়:
max(e-ns, ne-s)রিটার্ন করুন (প্রথম বা শেষ নেগেটিভ বাদ দিয়ে)
- নেগেটিভ সংখ্যা গণনা করুন (
- মূল ফাংশনে:
- শূন্য দিয়ে অ্যারে বিভক্ত করুন (প্রডাক্ট শূন্য হলে পজিটিভ হয় না)
- প্রতিটি নন-জিরো সেগমেন্টের জন্য
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) - লিনিয়ার টাইম, কারণ অ্যারেটি একবার ট্রাভার্স করা হয়।