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