Skip to main content
 首页 » 编程设计

python之查找 n 对数字之间的最大距离(在数字范围内)

2025年05月04日21yxwkf

我正在尝试编写一种算法,在给定 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)]  

如果您迫切需要一本字典,最好的方法可能是将最大值存储为键,并将列表或元组中的数字对存储为值。