我有計算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