Python中用于计算数组中美好对数的程序

Python中用于计算数组中美好对数的程序

假设我们有一个名为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] 增加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 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程