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
广告