Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมนับคู่ที่ดี (nice pairs) ในอาร์เรย์ใน Python

สมมติว่ามีอาร์เรย์ nums ค่าไม่เป็นลบ ต้องหาจำนวนคู่ดัชนี (i, j) ที่เป็น "nice" โดยเงื่อนไข:

  1. 0 <= i < j < len(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)

วิธีแก้ปัญหา

  1. m := 10^9 + 7
  2. dic := defaultdict(int)
  3. วน num ใน nums:
    • rev := int(str(num)[::-1])
    • dic[num - rev] += 1
  4. res := 0
  5. วน val ในค่าของ dic:
    • res += val * (val - 1) // 2
  6. คืนค่า 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