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

পাইথনে ন্যূনতম পরম যোগফল পার্থক্য খুঁজে বের করার প্রোগ্রাম


আমাদের দুটি ধনাত্মক মানের অ্যারে আছে nums1 এবং nums2, যাদের আকার একই। এই দুটি অ্যার่র পরম যোগফল পার্থক্য হলো |nums1[i] - nums2[i]|-এর যোগফল প্রতিটি 0 ≤ i < n এর জন্য (0-ইন্ডেক্সড)। এখন, আমরা nums1-এর tối बह একটি উপাদানকে nums1-এর অন্য যেকোনো উপাদান দিয়ে প্রতিস্থাপন করতে পারি যাতে পরম যোগফল পার্থক্য ন্যূনতম হয়। আমাদের প্রতিস্থাপনের পর ন্যূনতম পরম যোগফল পার্থক্য বের করতে হবে। উত্তর অনেক বড় হতে পারে, তাই এটিকে 10^9 + 7 দিয়ে মডুলো করে রিটার্ন করুন।

উদাহরণস্বরূপ, ইনপুট nums1 = [2,8,6], nums2 = [3,4,6] হলে আউটপুট হবে 3 কারণ, দুটি সম্ভাব্য অপ্টিমাল সমাধান রয়েছে:

  • ইন্ডেক্স 1-এর উপাদানকে ইন্ডেক্স 0-এর উপাদান দিয়ে প্রতিস্থাপন: [2,8,6] => [2,2,6]

  • ইন্ডেক্স 1-এর উপাদানকে ইন্ডেক্স 2-এর উপাদান দিয়ে প্রতিস্থাপন: [2,8,6] => [2,6,6]

এই দুটির যেকোনো একটি দিয়ে যোগফল পার্থক্য পাওয়া যায় |2-3| + (|2-4| বা |6-4|) + |6-6| = 3।

সমাধানের ধাপসমূহ

  • যদি nums1 == nums2 হয়, তবে:

    • 0 রিটার্ন করুন

  • minn_diff := -infinity

  • ind := -1

  • i = 0 থেকে nums1-এর আকার - 1 পর্যন্ত লুপ চালান:

    • যদি |nums1[i] - nums2[i]| > minn_diff হয়, তবে:

      • ind := i

      • minn_diff := |nums1[i] - nums2[i]|

  • diff := |nums1[ind] - nums2[ind]|

  • index := ind

  • i = 0 থেকে nums1-এর আকার - 1 পর্যন্ত লুপ চালান:

    • যদি i != ind হয়, তবে:

      • যদি |nums1[i] - nums2[ind]| < diff হয়, তবে:

        • index := i

        • diff := |nums1[i] - nums2[ind]|

  • summ := 0

  • i = 0 থেকে nums1-এর আকার - 1 পর্যন্ত লুপ চালান:

    • যদি i == ind হয়, তবে:

      • summ := summ + |nums1[index] - nums2[i]|

    • অন্যথায়:

      • summ := summ + |nums1[i] - nums2[i]|

  • summ mod (10^9 + 7) রিটার্ন করুন

উদাহরণ

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

def solve(nums1, nums2):
    if nums1 == nums2:
        return 0
    minn_diff = float('-inf')
    ind = -1
    for i in range(len(nums1)):
        if abs(nums1[i] - nums2[i]) > minn_diff:
            ind = i
            minn_diff = abs(nums1[i] - nums2[i])
    diff = abs(nums1[ind] - nums2[ind])
    index = ind
    for i in range(len(nums1)):
        if i != ind:
            if abs(nums1[i] - nums2[ind]) < diff:
                index = i
                diff = abs(nums1[i] - nums2[ind])
    summ = 0
    for i in range(len(nums1)):
        if i == ind:
            summ += abs(nums1[index] - nums2[i])
        else:
            summ += abs(nums1[i] - nums2[i])
    return summ % (10**9 + 7)

nums1 = [2,8,6]
nums2 = [3,4,6]
print(solve(nums1, nums2))

ইনপুট

[2,8,6], [3,4,6]

আউটপুট

3
  1. লিস্টের কিউমুলেটিভ সাম বের করার পাইথন প্রোগ্রাম

  2. পাইথনে অ্যারের যোগফল বের করা

  3. পাইথনে লিস্টের সব পেয়ারের অ্যাবসোলিউট ডিফারেন্সের যোগফল

  4. পাইথনে একটি সংখ্যার গুণনীয়গুলোর ন্যূনতম যোগফল বের করার প্রোগ্রাম