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

পাইথনে অ্যারেতে নাইস জোড়া গণনা করার প্রোগ্রাম


আমাদের একটি অ্যারে আছে nums যাতে নন-নেগেটিভ মান রয়েছে। আমাদের অ্যারেতে নাইস জোড়া ইন্ডেক্সের সংখ্যা বের করতে হবে, যদি উত্তর অনেক বড় হয় তবে 10^9+7 দিয়ে মডুলো করে রিটার্ন করুন। এখানে একটি ইন্ডেক্স জোড়া (i, j) নাইস বলা হয় যদি নিচের শর্তগুলো পূরণ করে:

  1. 0 ≤ i < j < nums-এর আকার
  2. nums[i] + rev(nums[j]) == nums[j] + rev(nums[i])

দ্রষ্টব্য - এখানে rev() শুধুমাত্র পজিটিভ অংশকে উল্টে দেয়, অর্থাৎ rev(564) = 465, কিন্তু rev(540) = 45।

উদাহরণস্বরূপ, ইনপুট nums = [97,2,42,11] হলে আউটপুট হবে 2 কারণ দুটি জোড়া রয়েছে (0,2) এবং (1,3), প্রথমটি জন্য [97 + rev(42) = 97+24 = 121, এবং 42 + rev(97) = 42 + 79 = 121] এবং দ্বিতীয়টি জন্য [2 + rev(11) = 2 + 11 = 13 এবং 11 + rev(2) = 13]।

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

  • m := (10^9) + 7

  • dic := একটি খালি ম্যাপ, ডিফল্ট ভ্যালু 0

  • nums-এর প্রতিটি num এর জন্য:

    • rev := num-এর উল্টো

    • dic[num - rev] := dic[num - rev] + 1

  • res := 0

  • dic-এর সব ভ্যালু val এর জন্য:

    • res := res + (val * (val-1)) // 2

  • res % m রিটার্ন করুন

উদাহরণ

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

from collections import defaultdict
def solve(nums):
    m = (10**9) + 7
    dic = defaultdict(int)
    for num in nums:
        rev = int(str(num)[::-1])
        dic[num - rev] += 1
    res = 0
    for val in dic.values():
        res += (val * (val - 1)) // 2
    return res % m

nums = [97,2,42,11]
print(solve(nums))

ইনপুট

[97,2,42,11]

আউটপুট

2
  1. Python প্রোগ্রাম: NumPy অ্যারে রিভার্স করার পদ্ধতি

  2. পাইথনে যোগফল ১ হয় এমন ফ্র্যাকশন জোড়ার সংখ্যা বের করার প্রোগ্রাম

  3. অ্যারে-এ ইনভারশন কাউন্ট করার পাইথন প্রোগ্রাম

  4. অ্যারে রোটেশনের পাইথন প্রোগ্রাম