python找与7相关的数字_python – 找到N个最接近的数字

有一个二维数组,像 –

a[0] = [ 0 , 4 , 9 ]

a[1] = [ 2 , 6 , 11 ]

a[2] = [ 3 , 8 , 13 ]

a[3] = [ 7 , 12 ]

需要从每个子阵列中选择一个元素,使得最终数字的最大数与最小数之间的差最小.

上述的答案将是= [9,6,8,7].

做了一个算法,但不觉得它是一个好的.

在时间和空间复杂性方面做什么是有效的算法?

编辑 – 我的算法(在python) –

INPUT - Dictionary : table{}

OUTPUT - Dictionary : low_table{}

#

N = len(table)

for word_key in table:

for init in table[word_key]:

temp_table = copy.copy(table)

del temp_table[word_key]

per_init = copy.copy(init)

low_table[init]=[]

for ite in range(N-1):

min_val = 9999

for i in temp_table:

for nums in temp_table[i]:

if min_val > abs(init-nums):

min_val = abs(init-nums)

del_num = i

next_num = nums

low_table[per_init].append(next_num)

init = (init+next_num)/2

del temp_table[del_num]

lowest_val = 99

lowest_set = []

for x in low_table:

low_table[x].append(x)

low_table[x].sort()

mini = low_table[x][-1]-low_table[x][0]

if mini < lowest_val:

lowest_val = mini

lowest_set = low_table[x]

print lowest_set

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值