我被问到一个问题,我已经坚持了很长时间。
问题:
给出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
解决此问题的时间和内存效率最高的解决方案是什么?
答案 0 :(得分:0)
我建议使用二等分法找到最大的差异,以便可以按期望的方式对数组进行分割。
要测试是否可以分割,请在满足约束条件的情况下,从左侧开始将元素贪婪地分配给子数组。
仅在强制执行时(由于差异太大或达到数组允许的最大元素数量)才启动新的子数组。
我相信,如果存在针对特定差值的贪婪分配,那么贪婪分配总是应该找到解决方案。