子数组内的最优最大差
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 更昂贵。
解决这个问题最节省时间和内存的方法是什么?
我建议使用二分法找到可以按所需方式划分数组的最大差异。
为了测试除法是否可行,在满足约束的情况下贪婪地将元素分配给从左边开始的子数组。
只有在强制时才开始一个新的子数组(要么是差异太大,要么是达到数组中允许的最大元素数)。
我相信这个贪婪的分配应该总能找到一个解决方案,如果存在一个特定的差异值。
我被问了一个问题,我已经被困了很长一段时间了。
问题:
给定一个由 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 更昂贵。
解决这个问题最节省时间和内存的方法是什么?
我建议使用二分法找到可以按所需方式划分数组的最大差异。
为了测试除法是否可行,在满足约束的情况下贪婪地将元素分配给从左边开始的子数组。
只有在强制时才开始一个新的子数组(要么是差异太大,要么是达到数组中允许的最大元素数)。
我相信这个贪婪的分配应该总能找到一个解决方案,如果存在一个特定的差异值。