在Python中找到第i个和第j个元素相同的数字对的数量
假设我们有一个名为nums的数组。我们必须找到有多少个数字对(i,j)使得nums[i] = nums[j]但i和j不相同。
所以,如果输入如下nums = [1,3,1,3,5],那么输出将是4,因为这些数字对是(0,2),(2,0),(1,3)和(3,1)。
为了解决这个问题,我们需要遵循以下步骤-
- d := 一个新的map
- 对于nums中的每个c,执行以下操作:
- 如果c在d中,则d[c] := (d[c] + 1),否则设置为1。
- res := 0
- 对于列表中的每个元素c(其中x是d中所有d[x]> 1的x),执行以下操作:
- res := res + (d[c] * (d[c]-1))
- 返回结果res
示例
请看下面的实现以便更好地理解-
def solve(nums):
d = {}
for c in nums:
d[c] = d[c] + 1 if c in d.keys() else 1
res = 0
for c in (x for x in d if d[x]> 1):
res += (d[c] * (d[c]-1))
return res
nums = [1,3,1,3,5]
print(solve(nums))
输入
[1,3,1,3,5]
输出
4