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