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

পাইথনে লিস্ট ব্যালেন্সড করতে ডিলিশনের ন্যূনতম সংখ্যা খুঁজে বের করার প্রোগ্রাম


মান ল করুন ০ এবং ১ ধারণকারী একটি তালিকা, আমরা তালিকার সামনে থেকে বা পিছন থেকে মান মুছে ফেলতে পারি। অবশেষে বাকি তালিকায় ০ এবং ১ সমান সংখ্যক থাকতে হবে। ন্যূনতম কতটি ডিলিশন লাগবে তা খুঁজে বের করতে হবে।

যদি ইনপুট হয় nums = [1, 1, 1, 0, 0, 1], তবে আউটপুট হবে ২, কারণ প্রথম ১ এবং শেষ ১ মুছে ফেললে দুটি ১ এবং দুটি ০ থাকবে।

এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব:

  • longest := 0
  • d := একটি ম্যাপ যেখানে ০ কী-এর জন্য -1 মান আছে
  • currSum := 0
  • i কে ০ থেকে nums-এর আকার পর্যন্ত লুপ চালান:
    • যদি nums[i] == 0, currSum := currSum - 1
    • অন্যথায়, currSum := currSum + 1
    • যদি currSum d-এ থাকে, longest := max(longest, i - d[currSum])
    • অন্যথায়, d[currSum] := i
  • nums-এর আকার - longest ফেরত দিন

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন:

উদাহরণ

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

  1. পাইথনে লিস্ট ব্যালেন্সড করতে ডিলিশনের ন্যূনতম সংখ্যা খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে একটি সংখ্যাকে অন্য সংখ্যায় রূপান্তর করার ন্যূনতম অপারেশন বের করার প্রোগ্রাম

  3. পাইথনে স্ট্রিং s-কে পরিবর্তন করে t কে সাবস্ট্রিং बनानेয় ন্যূনতম অপারেশন বের করার প্রোগ্রাম

  4. পাইথনে দুটি স্ট্রিং সমান করার জন্য ন্যূনতম প্রি-প্রসেসিং মুভ গণনা