這個問題不難,可以通過一個循環嵌套循環解決。但是既然說了兩個數組元素都是從小到大排列,那麼肯定有別的簡單的辦法。
如果x[i]>y[j],對於x[i]-y[j],所有排在y[j]之前的元素計算這個式子的值都會大於x[i]-y[j],因此,要想尋找到更小的距離,j++。
同理,如果x[i]<y[j],對於y[j]-x[i],所有排在x[i]之前的元素計算這個式子得出來的值都大於y[j]-x[i],因此,想尋找更小的值,i++。
明白了這個,代碼就可以理解了。
/************************************************************************/
/* 兩個數組最短距離問題 */
/* */
/************************************************************************/
#include <stdio.h>
#include <limits.h>
#define INFINITE INT_MAX /*int所能表示的最大值*/
#define min(x,y) ((x) < (y) ? (x) : (y))
/*
x:第一個數組
m:數組x的長度
y:第二個數組
n:數組y的長度
*/
int getMinDistNew(int x[], int m, int y[], int n)
{
int indexX,indexY;
int minimum = INFINITE;
indexX = 0;
indexY = 0;
while (indexX < m && indexY < n)
{
if (x[indexX] >= y[indexY])
{
minimum = min(minimum,x[indexX] - y[indexY]);
indexY++;
}
else
{
minimum = min(minimum,y[indexY] - x[indexX]);
indexX++;
}
}
return minimum;
}
int main()
{
int rst;
int x[6] = {1,2,4,8,9,11};
int y[7] = {-5,-3,-1,0,3,4,9};
rst = getMinDistNew(x,6,y,7);
printf("The minimum distance is %d\n",rst);
return 0;
}