- 论坛徽章:
- 4
|
回复 #10 happy_fish100 的帖子
有点错误,更正如下:
如果a[n]和b[m]是升序排列的,算法如下:
int i;
int k;
int t;
int dis;
//先找相减小于0的匹配项
i = 0;
k = 0;
while (i < n && k < m)
{
dis = a[i] - b[k];
if (dis >= 0)
{
k++;
continue;
}
if (dis > -1 * min)
{
k++;
}
else if (dis > -1 * max)
{
//输出时采用贪婪原则
t = i;
while (t < n && (a[t] - b[k] > -1 * max) && (a[t] - b[k] < -1 * min))
{
printf("%d, %d\n", a[t], b[k]);
t++;
}
k++;
}
else
{
i++;
}
}
//再找相减大于0的匹配项,和上面的算法类似
i = 0;
k = 0;
while (i < n && k < m)
{
dis = a[i] - b[k];
if (dis <= 0)
{
i++;
continue;
}
if (dis < min)
{
i++;
}
else if (dis < max)
{
//打印时采用贪婪原则
t = k;
while (t < m && (a[i] - b[t] > min) && (a[i] - b[t] < max))
{
printf("%d, %d\n", a[i], b[t]);
t++;
}
i++;
}
else
{
k++;
}
} |
|