子阵列内的最佳最大差异

时间:2018-12-17 15:51:00

标签: java algorithm computation-theory

我被问到一个问题,我已经坚持了很长时间。

问题:

给出N个整数的排序数组,将该数组划分为最多R个相邻和不重叠的子数组,最多包含M个元素,这样我们就可以最小化每个子数组中最大和最小值之间的差异。在最小化每个子阵列中的差异之后,输出应包含任何子阵列中的最大差异。

示例:

N = 7

R = 4

M = 3

原始数组:[1,2,3,3,3,5,6]

最佳子数组(可能的1种情况):[1],[2],[3,3,3],[5,6]

正确的输出:1

解决此问题的时间和内存效率最高的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

我建议使用二等分法找到最大的差异,以便可以按期望的方式对数组进行分割。

要测试是否可以分割,请在满足约束条件的情况下,从左侧开始将元素贪婪地分配给子数组。

仅在强制执行时(由于差异太大或达到数组允许的最大元素数量)才启动新的子数组。

我相信,如果存在针对特定差值的贪婪分配,那么贪婪分配总是应该找到解决方案。

相关问题