有一个二维数组,比如 -
a[0] = [ 0 , 4 , 9 ] a[1] = [ 2 , 6 , 11 ] a[2] = [ 3 , 8 , 13 ] a[3] = [ 7 , 12 ]
需要从每个子数组中选择一个元素,以使结果集的数字最接近,即集合中最大数字和最小数字之间的差最小。
上面的答案将是 = [ 9 , 6 , 8 , 7 ]。
做了一个算法,但感觉不是很好。就时间和空间复杂度而言,什么是有效的算法?
编辑 - 我的算法(在 python 中) -
输入 - 字典:表{}
输出 - 字典:low_table{}
#
N = len(表)
对于表中的 word_key:
对于表中的初始化[word_key]:
temp_table = copy.copy(表)
del temp_table[word_key]
per_init = copy.copy(init)
低表[初始化]=[]
对于范围内的项目(N-1):
min_val = 9999
对于 temp_table 中的 i:
对于 temp_table[i] 中的 nums:
如果 min_val > abs(init-nums):
min_val = abs(init-nums)
del_num = 我
next_num = 数字
low_table[per_init].append(next_num)
初始化 = (init+next_num)/2
del temp_table[del_num]
最低值 = 99
最低集 = []
对于低表中的 x:
low_table[x].append(x)
low_table[x].sort()
迷你 = low_table[x][-1]-low_table[x][0]
如果迷你 < 最低值:
最低值 = 迷你
最低集 = 低表 [x]
打印最低集