有一个二维数组,比如 -
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] 打印最低集