我需要找到最接近的整數數組對數。例如:如果我有{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(左 - 右)獲得的值,如果它不太看或大於下一個值?還是我錯了,做錯了什麼?提前致謝。
我認爲你的算法不正確。 – zhujs 2014-12-13 02:50:45
如果你能指定它不正確的原因,我將非常感激。我被困在這個問題上好幾個小時,我的大腦即將爆炸。 :) – RashGarroth 2014-12-13 02:54:55
你必須使用分而治之算法來做到這一點嗎? – zhujs 2014-12-13 03:07:43