【问题标题】:optimal maximum difference within subarrays [closed]子阵列内的最佳最大差异[关闭]
【发布时间】:2018-12-17 15:50:59
【问题描述】:

我收到了一个困扰了我很长一段时间的问题。

问题:

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

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

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

【问题讨论】:

标签: java algorithm computation-theory


【解决方案1】:

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

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

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

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

【讨论】:

  • 您能否扩展使用二分法将原始数组划分为子数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 2015-08-22
  • 2020-12-11
  • 2016-05-09
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
相关资源
最近更新 更多