【发布时间】:2014-07-26 04:13:29
【问题描述】:
给定一个整数数组 arr[],找出任意两个元素之间的差,使得较大的元素出现在 arr[] 中较小的数字之后。
Max Difference = Max { arr[x] - arr[y] | x > y }
例子:
如果数组是
[2, 3, 10, 6, 4, 8, 1, 7],那么返回值应该是8(10和2之间的差异)。如果数组是
[ 7, 9, 5, 6, 3, 2 ],那么返回值应该是2(7和9之间的差异)
我的算法:
我想到了使用 D&C 算法。 说明
2, 3, 10, 6, 4, 8, 1, 7
then
2,3,10,6 and 4,8,1,7
then
2,3 and 10,6 and 4,8 and 1,7
then
2 and 3 10 and 6 4 and 8 1 and 7
由于这些元素将保持相同的顺序,我将得到最大的差异,这里是 6。
现在我将返回合并这些数组,并再次找到第一个块的最小值和第二个块的最大值之间的差异,并继续这样做直到结束。
我无法在我的代码中实现这一点。 任何人都可以为此提供一个伪代码吗?
【问题讨论】:
-
您能否把您的问题说得更清楚些。似乎您正在尝试先实现合并排序,然后再实现其他目标。
-
@shekharsuman 我想要最大的 (arr[x]-arr[y]) 使得索引 x > y。
标签: algorithm divide-and-conquer