【发布时间】:2022-06-30 04:51:31
【问题描述】:
给定两个长度相同的整数数组 a 和 b。
让我们将a和b之间的差异定义为对应元素的绝对差异之和:
差异 = |a[0] - b[0]| + |a[1] - b[1]| …
您可以将 a 的 一个 元素替换为 a 的任何其他元素。
您的任务是返回 a 和 b 之间的最小可能差异,这可以通过对 a 执行最多一次此类替换来实现。
您也可以选择保持数组不变。例子
对于 a = [1, 3, 5] 和 b = [5, 3, 1] ,输出应该是 solution(a, b) = 4。
- 如果我们保持数组 a 不变,则差异:|1 - 5| + |3 - 3| + |5 - 1| = 8。
- 如果我们将 a[0] 替换为 a[1],我们会得到
[3, 3, 5] 差是 |3 - 5| + |3 - 3| + |5 - 1| = 6;- 如果我们将 a[0] 替换为 a[2],我们会得到
[5, 3, 5] 差是 |5 - 5| + |3 - 3| + |5 - 1| = 4;- 如果我们将 a[1] 替换为 a[0],我们会得到
[1, 1, 5] 差是 |1 - 5| + |1 - 3| + |5 - 1| = 10;- 如果我们将 a[1] 替换为 a[2],我们会得到
[1, 5, 5] 差是 |1 - 5| + |5 - 3| + |5 - 1| = 10;- 如果我们将 a[2] 替换为 a[0],我们会得到
[1, 3, 1] 差是 |1 - 5| + |5 - 3| + |1 - 1| = 4;- 如果我们将 a[2] 替换为 a[1],我们会得到
[1, 3, 3] 差是 |1 - 5| + |3 - 3| + |3 - 1| = 6;所以最终答案是 4。
解决方案最多只能是 O(nlogn) 复杂度。
【问题讨论】:
-
问题是什么?
-
编写一个最多线性复杂度的解决方案
-
扫描两个数组的绝对差异,并在最大堆中跟踪它们。将
a的元素排序到一个单独的数组中。一个接一个地从最大堆中取出元素,并在已排序的a副本中进行二进制搜索,以寻找减少绝对差异的补码。一旦你找到了一对将差异减小到大于或等于最大堆中的下一个项目的对,你就找到了你的解决方案,因为你可以确定没有更好的对。这是线性的,但可能不是最佳的。 -
请attribute&credit properly。
Code up a solution…是一个需求 - 你有问题吗? -
eeeeewwww,作业呕吐。做这项工作,然后用你的话问一个问题。不要只是把你的作业丢在这里,希望有人会为你做。