我有计算N个整数对的数目的总和为value
的程序数。为了简化问题,还假定整数是不同的。确定总和到数组中的某些值的整数对
l.Sort();
for (int i = 0; i < l.Count; ++i)
{
int j = l.BinarySearch(value - l[i]);
if (j > i)
{
Console.WriteLine("{0} {1}", i + 1, j+1);
}
}
为了解决这个问题,我们对数组进行排序(以启用二进制搜索),然后,对阵列中的每个条目a[i]
,为value - a[i]
做一个二进制搜索。如果结果是j
与j > i
索引,我们将显示这一对。
但这种算法没有在接下来的输入工作:
1 2 3 4 4 9 56 90
因为j
总是比i
小。
如何解决这个问题?
在你的输入中,你看到总和为0的对吗? – Leeor
看起来他希望这两个对的总和为“value”,不一定是0. –
@TomZych是的,修正了它 – Anatoly