Python程序:查找包含(基数,数字)对的数组中的匹配数


假设我们得到了几个不同的(x, y)格式的数对。这里x表示数字的基数,y表示数字本身。列表中存在意义相同的数对。我们必须检查给定数对中的匹配数。给定的数对可能是冗余的,也可能包含无效的基数-数字组合。

因此,如果输入类似于num_inputs = 2, input_arr = [(10, 15), (8, 17)],则输出将为1。

变量num_inputs指定输入的数量,数组input_arr列出了数对。在这里,如果我们查看这两个数对;10进制(十进制)的15与8进制(八进制)的17相同。因此,有一个匹配项,我们返回输出值1。

为了解决这个问题,我们将遵循以下步骤:

  • arr_len := input_arr的大小

  • temp_dict := 一个包含整数值的新映射

  • 对于从0到num_inputs的i,执行:

    • num_base := input_arr中第i个数对的第一个数字的字符串表示

    • num_val := input_arr中第i个数对的第二个数字的字符串表示

    • temp_dict[(num_val的整数表示, num_base的整数表示)] := temp_dict[(num_val的整数表示, num_base的整数表示)] + 1

  • cnt := 0
  • 对于temp_dict所有值的列表中的每个值,执行:
    • cnt := cnt + 值 * floor((值 - 1) / 2)
  • 返回cnt

示例

让我们看看下面的实现,以便更好地理解:

 在线演示

from collections import defaultdict
def solve(num_inputs, input_arr):
   arr_len = len(input_arr)
   temp_dict = defaultdict(int)
   for i in range(num_inputs):
      num_base, num_val = str(input_arr[i][0]), str(input_arr[i][1])
      temp_dict[int(num_val, int(num_base))] += 1
   cnt = 0
   for value in temp_dict.values():
      cnt += value*(value - 1)//2
   return cnt
print(solve(2, [(10, 15), (8, 17)]))

输入

2, [(10, 15), (8, 17)]

输出

1

更新于:2021年5月18日

322 次浏览

开启您的职业生涯

完成课程后获得认证

开始学习
广告