【发布时间】:2015-02-11 19:53:33
【问题描述】:
我需要找到一个整数数组中最接近的一对数字。例如:如果我有 {25, 13, 59, 7, 16} 个数字,我的结果应该是 |13 - 16| = 3. 所以我尝试使用分治算法来解决这个问题。但是当我从子问题中得到数字差异时,我无法存储和比较它们。当我调试它时,我看到我的程序出错了,但几个小时都找不到任何解决方案。
这是我的功能:
int closestPairs(int list[], int first, int last)
{
if (last - first == 1)
return 0;
else if (last - first == 2)
return abs(list[first] - list[last - 1]);
int median = (first + last) / 2;
int left = closestPairs(list, first, median);
int right = closestPairs(list, median, last);
int temp = abs(list[first] - list[last - 1]);
if (abs(left - right) < temp)
temp = abs(left - right);
return temp;
}
这里是驱动函数:
int main()
{
int list[] = { 34, 23, 48 , 4, 66, 69};
int n = sizeof(list) / sizeof(int);
cout << closestPairs(list, 0, n) << endl;
return 0;
}
那么如何存储从 abs(left - right) 获得的值并查看它是否小于或大于下一个值?还是我完全错了,做的一切都错了?提前致谢。
【问题讨论】:
-
我认为你的算法不正确。
-
如果您能说明错误的原因,我将不胜感激。我被这个问题困了几个小时,我的大脑快要爆炸了。 :)
-
你必须使用分而治之算法吗?
-
是的,我可以使用迭代算法来做到这一点,但在这种情况下我需要使用递归。
标签: c++ algorithm divide-and-conquer