Spa*_*dan 11 algorithm performance
来源:Google面试问题
编写例程以确保输入中的相同元素在输出中最大程度地分布?
基本上,我们需要以这样的方式放置相同的元素,使得TOTAL扩展尽可能最大.
例:
Input: {1,1,2,3,2,3}
Possible Output: {1,2,3,1,2,3}
Total dispersion = Difference between position of 1's + 2's + 3's = 4-1 + 5-2 + 6-3 = 9 .
Run Code Online (Sandbox Code Playgroud)
我不是在所有 肯定的是,如果有可用的this.Also最佳多项式时间算法,没有其他细节提供了除此之外的其他问题.
我的想法是,计算输入中每个元素的频率,然后将它们一次排列在输出中,每个不同的元素,直到所有频率都耗尽.
我不确定我的做法.
任何方法/想法的人.
我相信这个简单的算法会起作用:
现在,直观上这不会提供良好的传播:
for {1, 1, 1, 1, 2, 3, 4}==> {1, 2, 3, 4, 1, 1, 1}
for {1, 1, 1, 2, 2, 2, 3, 4}==>{1, 2, 3, 4, 1, 2, 1, 2}
然而,我认为鉴于提供的评分功能,这是您可以获得的最佳传播。由于分散分数计算距离的总和而不是距离的平方和,因此只要在其他地方有较大的间隙需要补偿,就可以将多个重复项靠近在一起。
对于距离平方和分数,问题变得更难。也许面试问题取决于候选人认识到评分功能的这一弱点?