কম্পিউটার

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


ধরুন আমাদের কাছে nums1 এবং nums2 নামক দুটি অ্যারে আছে। অ্যারেগুলির মানগুলি 1 এবং 6 (অন্তর্ভুক্ত) এর মধ্যে। একটি অপারেশনে, আমরা 1 থেকে 6-এর মধ্যে যে কোনো অ্যারের যেকোনো মানকে আপডেট করতে পারি। সংখ্যা 1-এর মানের যোগফলকে nums2-এর মানের সমষ্টির সমান করতে আমাদের প্রয়োজনীয় ন্যূনতম সংখ্যক অপারেশন খুঁজে বের করতে হবে। সম্ভব না হলে আমাদের -1 ফিরতে হবে।

সুতরাং, যদি ইনপুটটি nums1 =[1,5,6], nums2 =[4,1,1] এর মত হয়, তাহলে আউটপুট হবে 2 কারণ আমরা nums2 কে [4,1,1] থেকে [4, তে পরিবর্তন করতে পারি। প্রথম অপারেশনে 1,6] এবং দ্বিতীয় অপারেশনে [4,2,6] সংখ্যা 1 এর সমান।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • s1 :=সংখ্যা1তে সমস্ত উপাদানের যোগফল

  • s2 :=সংখ্যা2

    -এ সমস্ত উপাদানের যোগফল
  • তালিকা সংখ্যা 1 সাজান এবং তালিকা সংখ্যা 2 সাজান

  • যদি s1> s2 হয়, তাহলে

    • অদলবদল সংখ্যা1 এবং সংখ্যা2

    • s1 এবং s2 অদলবদল করুন

  • উত্তর :=0

  • বাম :=0, ডানে :=সংখ্যার আকার 2 -1

  • যখন বাম <সংখ্যা1 এর দৈর্ঘ্য বা ডানদিকে>=0, করুন

    • যদি s1 s2 এর মত হয়, তাহলে

      • উত্তর ফেরত দিন

    • curr_left :=nums1[left] যদি বাকি থাকে

    • curr_right :=nums2[ডান] যদি ডান>=0 অন্যথায় 0

    • যদি 6-curr_left>=curr_right-1, তারপর

      • s1 :=s1 + সর্বনিম্ন 6-curr_left এবং s2-s1

      • left :=left + 1

    • অন্যথায়,

      • s2 :=s2 - ন্যূনতম curr_right-1 এবং s2-s1

      • ডান :=ডান - 1

    • ans :=ans + 1

  • রিটার্ন -1 যদি s1 s2 এর মত না হয় অন্যথায় উত্তর

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

def solve(nums1, nums2):
   s1 = sum(nums1)
   s2 = sum(nums2)
   nums1.sort()
   nums2.sort()
   if s1>s2:
      nums1, nums2 = nums2, nums1
      s1, s2 = s2, s1

   ans = 0
   left, right = 0, len(nums2)-1
   while(left<len(nums1) or right>=0):
      if s1==s2:
         return ans
      curr_left = nums1[left] if left<len(nums1) else 7
      curr_right = nums2[right] if right>=0 else 0
      if 6-curr_left>=curr_right-1:
         s1+= min(6-curr_left, s2-s1)
         left+=1
      else:
         s2-= min(curr_right-1, s2-s1)
         right-=1
      ans+=1
   return -1 if s1!=s2 else ans

nums1 = [1,5,6]
nums2 = [4,1,1]
print(solve(nums1, nums2))

ইনপুট

[1,5,6], [4,1,1]

আউটপুট

2

  1. পাইথনে সর্বাধিক যোগফল সহ সংলগ্ন সাবলিস্টের যোগফল খুঁজে বের করার প্রোগ্রাম

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

  3. পাইথন প্রোগ্রামে একটি সংখ্যার জোড় গুণনীয়কের সমষ্টি খুঁজুন

  4. সংখ্যার ন্যূনতম যোগফল নির্ণয়ের জন্য পাইথন প্রোগ্রাম