Java 子阵内的最优最大差

Java 子阵内的最优最大差,java,algorithm,computation-theory,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 我想测试每个可能的值以获得最小的差异,并及时测试每个值,但这将导致运行时比nlog

有人问了我一个问题,我一直在想这个问题

问题:

给定一个由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

我想测试每个可能的值以获得最小的差异,并及时测试每个值,但这将导致运行时比nlogn更昂贵


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

我建议使用二分法来找出最大的差异,以便以所需的方式分割数组

为了测试分割是否可行,在满足约束的情况下,贪婪地从左侧开始将元素分配给子阵列

仅当差异过大或达到阵列中允许的最大元素数时,才启动新子阵列


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

你想到了什么方法?你应该发布一个代码示例,你试图避免问题过于宽泛:-我投票结束这个问题,因为你能扩展使用二分法来分割吗将原始阵列转换为子阵列。