我正在尝试编写一种算法,在给定 n 对数字的情况下找到两个数字之间的最大距离。
这是我目前所拥有的。
Wire ints 是我的示例数字,第一对是 1,10,第二对是 1,10,第三对是 7,7.
wire_ints = [10, 1, 1, 10, 7, 7]
longest_cases = {}
largest_length = 0
q = 0
y = 0
leftcounter = 0
rightcounter = 1
while q < len(wire_ints):
left_port = wire_ints[leftcounter]
right_port = wire_ints[rightcounter]
length_wire = left_port - right_port
wire_length = abs(length_wire)
leftcounter = leftcounter + 2
rightcounter = rightcounter + 2
q = q + 2
y = y + 1
if not longest_cases:
largest_length = wire_length
longest_cases[wire_length] = y
elif wire_length == largest_length:
longest_cases[wire_length] = y
elif wire_length > largest_length:
largest_length = wire_length
longest_cases.clear()
longest_cases[wire_length] = y
print(longest_cases)
这当前输出 {9:2},并且没有错。 9 是这些数字对之间的最大距离。但是,我希望它打印 {9:1, 9:2}。
字典中的key指的是最大长度,value指的是原数组中pair的个数。前 2 个整数是对 1,然后是第二对 2,依此类推。
因此,由于数组有两对长度相同,因此它应该在字典中输出两对。
我想不通。 帮助!
请您参考如下方法:
这会获取您的初始输入并将其转换为元组列表。然后它计算元组成员之间的绝对差异并将其放入新列表中。然后您的最终输出将创建为 index_list。
wire_ints = [10, 1, 1, 10, 7, 7]
new_list = [(x,y) for (x,y) in zip(wire_ints[::2], wire_ints[1::2])]
diff_list = [abs(x[0] - x[1]) for x in new_list]
index_list = [(x, index) for (index, x) in enumerate(diff_list) if x == max(diff_list)]
print index_list
刚刚意识到这可以进一步压缩
new_list = [abs(x-y) for (x,y) in zip(wire_ints[::2], wire_ints[1::2])]
index_list = [(x, index) for (index, x) in enumerate(diff_list) if x == max(diff_list)]
如果您迫切需要一本字典,最好的方法可能是将最大值存储为键,并将列表或元组中的数字对存储为值。
