整数数组中的最小移位因此它们的差值> = k

时间:2012-11-21 15:41:12

标签: algorithm

我被要求实施一个算法,该算法将以下内容作为输入:

- 整数a的排序数组,例如a = [0,0,0,0,0,2,4,4,4,4,4]。如果它有助于实际输入作为两个数组给出,第一个给出整数,第二个给出第一个出现的整数。对于我们的例子[0,2,4],[5,1,5]。

- 整数k。

并返回一个唯一实数(两位小数)的数组b,其连续元素至少为k,最大差异| a [i] -b [i] |是最小的可能。阵列a和b都被排序。

到目前为止,我已将两个给定的数组合并为一个,如前所述,并且在几个循环设法生成数组a之后,一个带有唯一元素的排序数组遵循以下步骤:

- 对于整数的每个多重出现,例如, 5次0,我将它们移动到最小可能距离:假设k = 2然后[0,0,0,0,0] - > [ - 4,-2,0,2,4]。

- 然后我对数组进行排序,以便找到因转移而产生的多个外观。

- 重复这两个步骤,直到数组只有唯一的元素。 如果我有办法将我的最后一个数组的元素移动到它们所要求的位置(因此它们的最终差异是> = k),我认为后者与起始数组的差异将由我请求的移位。

我的整个想法可能是错误的或者说太慢但我已经陷入了这个问题的死胡同,所以任何帮助都会很棒!提前谢谢!!!

P.S。我提供了一个小练习的例子,让整个事情变得更加清晰: K = 2,a = [0,1],b = [3,1]( - > c = [0,0,0,1])所以我们的结果应该是[-2,5,-0,5 ,1,5,2,5],这使得最大最小班次为2,50。

1 个答案:

答案 0 :(得分:0)

如果max-min <= k*n,则数组b

M+0, M+k, M+2k, ..., M+(n-1)k

M满足

|max-M-k(n-1)| = |min-M|. 

所有你需要的 关心的是第一个也是最后一个要素 数组a只要你的连续数组b元素 相差k,他们必须在这种情况下获得最佳结果。

如果max-min > k*n则更容易: 设置

k=(max-min)/(n-1)  

满足条件中的小数位并设置b[0]=min。将k添加到b的每个下一个元素。