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

পাইথনে দুটি অ্যারের যোগফল সমান করার ন্যূনতম অপারেশন বের করার প্রোগ্রাম

দুটি লিস্ট nums1, nums2 (এলিমেন্ট ১-৬)। এক অপারেশনে যেকোনো এলিমেন্ট ১-৬ এর মধ্যে পরিবর্তন করা যায়। দুটি অ্যারের যোগফল সমান করার ন্যূনতম অপারেশন বের করুন। না পারলে -1।

উদাহরণ

nums1 = [1, 4], nums2 = [5, 4, 4] → আউটপুট: 2

nums1-এ ১ কে ৬ করলে যোগফল ১০, nums2-এ একটা ৪ কে ১ করলে যোগফল ১০।

এলগরিদম (গ্রিডি + টু পয়েন্টার)

  1. sa := sum(nums1), sb := sum(nums2)
  2. যদি sa > sb: সোয়্যাপ করুন।
  3. nums1 অ্যাসেন্ডিং, nums2 ডিসেন্ডিং সর্ট করুন।
  4. toadd := sb - sa, res := 0
  5. দুই পয়েন্টার i, j দিয়ে সর্বোচ্চ পরিবর্তন (৬-nums1[i] বা nums2[j]-১) নিন যতক্ষণ toadd > 0।
  6. res রিটার্ন করুন।

পাইথন কোড

def solve(nums1, nums2):
    sa = sum(nums1)
    sb = sum(nums2)
    if sa > sb:
        nums1, nums2 = nums2, nums1
        sa, sb = sb, sa
    nums1.sort()
    nums2.sort(reverse=True)
    res = 0
    toadd = sb - sa
    i = j = 0
    while toadd > 0:
        res += 1
        if i < len(nums1) and j < len(nums2):
            resa = 6 - nums1[i]
            resb = nums2[j] - 1
            if resa > resb:
                toadd -= resa
                i += 1
            else:
                toadd -= resb
                j += 1
        elif i < len(nums1):
            toadd -= 6 - nums1[i]
            i += 1
        elif j < len(nums2):
            toadd -= nums2[j] - 1
            j += 1
        else:
            return -1
    return res

nums1 = [1, 4]
nums2 = [5, 4, 4]
print(solve(nums1, nums2))  # আউটপুট: 2

ইনপুট / আউটপুট

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

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

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

  4. পাইথনে দুটি অ্যারে থেকে সমান সম্বলিত সাবঅ্যারে খুঁজে বের করা