子数组内的最优最大差

optimal maximum difference within subarrays

我被问了一个问题,我已经被困了很长一段时间了。

问题:

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

示例:

N = 7

R = 4

男=3

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

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

正确输出:1

我正在考虑测试每个可能值的最小差异并在 O(N) 时间内测试每个值,但这会导致运行时间比 nlogn 更昂贵。

解决这个问题最节省时间和内存的方法是什么?

我建议使用二分法找到可以按所需方式划分数组的最大差异。

为了测试除法是否可行,在满足约束的情况下贪婪地将元素分配给从左边开始的子数组。

只有在强制时才开始一个新的子数组(要么是差异太大,要么是达到数组中允许的最大元素数)。

我相信这个贪婪的分配应该总能找到一个解决方案,如果存在一个特定的差异值。