Python程序:查找包含(基数,数字)对的数组中匹配数的数量
假设我们给出多个不同格式为(x,y)的对。这里的x表示数字的基数,y表示数字本身。在列表中有意义相同的对。我们必须检查给定数字对中的匹配数。给定的对可能是冗余的,也可能包含无效的基数-数字组合。
因此,如果输入为num_inputs = 2,input_arr = [(10,15),(8,17)],则输出将是1。
变量num_inputs指定输入数,数组input_arr列出数字对。在这里,如果我们看两个对;十进制的15与八进制的17是相同的。因此,有一个匹配并返回输出值1。
要解决这个问题,我们将遵循以下步骤:
- arr_len:= input_arr的大小
- temp_dict:=包含整数值的新映射
- 对于i在范围0到num_inputs的范围内,执行
- num_base:=输入input_arr中第1对的第1个数字的字符串表示形式
- num_val:=输入input_arr中第i个对的第二个数字的字符串表示形式
- temp_dict [整数表示(num_val,整数表示(num_base))]:= temp_dict [整数表示(num_val,整数表示(num_base))] + 1
- cnt:= 0
- 对于temp_dict所有值的列表中的每个值,执行
- cnt:= cnt + value * ((value-1) / 2)的地板值
- 返回cnt
更多Python相关文章,请阅读:Python 教程
示例
让我们看以下实现以更好地理解
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