ধরুন আমাদের একটি তালিকা আছে মাত্র দুটি মান 1 এবং −1। আমাদের দীর্ঘতম সাবলিস্টের দৈর্ঘ্য খুঁজে বের করতে হবে যার যোগফল 0।
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[1, 1, −1, 1, 1, −1, 1, −1, 1, −1], তাহলে আউটপুট হবে 8, কারণ দীর্ঘতম সাবলিস্ট হল [−1] , 1, 1, −1, 1, −1, 1, −1] যার যোগফল 0৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
টেবিল :=একটি নতুন খালি মানচিত্র
-
cs :=0, max_diff :=0
-
আমি 0 থেকে সংখ্যার আকার − 1 এর মধ্যে, কর
-
cs :=cs + nums[i]
-
যদি cs 0 এর মত হয়, তাহলে
-
max_diff :=সর্বাধিক i + 1 এবং max_diff
-
-
যদি cs টেবিলে থাকে, তাহলে
-
max_diff :=max_diff এর সর্বোচ্চ এবং (i − টেবিল[cs])
-
-
অন্যথায়,
-
টেবিল[cs] :=i
-
-
-
রিটার্ন max_diff
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def solve(self, nums): table = {} cs = 0 max_diff = 0 for i in range(len(nums)): cs += nums[i] if cs == 0: max_diff = max(i + 1, max_diff) if cs in table: max_diff = max(max_diff, i − table[cs]) else: table[cs] = i return max_diff ob = Solution() nums = [1, 1, −1, 1, 1, −1, 1, −1, 1, −1] print(ob.solve(nums))
ইনপুট
[1, 1, −1, 1, 1, −1, 1, −1, 1, −1]
আউটপুট
8