Java 子阵内的最优最大差
有人问了我一个问题,我一直在想这个问题 问题: 给定一个由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更昂贵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
解决这个问题最节省时间和内存的解决方案是什么?我建议使用二分法来找出最大的差异,以便以所需的方式分割数组 为了测试分割是否可行,在满足约束的情况下,贪婪地从左侧开始将元素分配给子阵列 仅当差异过大或达到阵列中允许的最大元素数时,才启动新子阵列
我相信这个贪婪的分配应该总能找到一个解决方案,如果存在一个特定的差异值。你想到了什么方法?你应该发布一个代码示例,你试图避免问题过于宽泛:-我投票结束这个问题,因为你能扩展使用二分法来分割吗将原始阵列转换为子阵列。