用 Python 编写一个程序来计算数组中的好对

pythonserver side programmingprogramming更新于 2025/12/13 0:12:17

假设我们有一个名为 nums 的数组,其值为非负值。我们必须找出数组中存在的索引好对的数量,如果答案太大,则返回答案 mod 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 := 一个空的 map,其默认值为 0

  • 对于 nums 中的每个 num,执行

    • rev := num 的逆

    • 将 dic[num - rev] 增加 1

  • res:= 0

  • 对于 dic 所有值列表中的每个 val,执行

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

  • 返回 res mod 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

相关文章


有用资源