检查在大小为N的ArrayList中,有两个数字,它们的和是N

时间:2018-04-30 16:03:42

标签: algorithm sorting heap mergesort

我有功课要做。 我必须实现一个算法,它必须检查大小为N的ArrayList,至少有两个数字,它们的总和是N. 算法的复杂性必须是Theta(n log n)。 我已经知道我可以使用Merge.Sort,或者Heap-Sort,然后我必须减去数组列表的每个元素的数组列表的大小。 问题是:顺序减去复杂性,仍然是 Theta(n log n)?!? 如果没有,我怎么能保持这种状态?

2 个答案:

答案 0 :(得分:1)

使用任何排序算法对数组进行排序,最好是具有可接受顺序的算法,例如mergeSort,它是(O(nlogn));

然后开始检查数组的第一个和最后一个元素并保留它们的索引,即' start'并且'结束。 当最后一个元素大于你想要的值时,将索引减一,然后比较' start'并且'结束'用你想要的价值,

如果它大于您想要的值,您将找不到满足您条件的任何两个值,

如果它等于您想要的值,请报告' start'并且'结束'元素

如果小于您想要的值,则开始'开始'指数 并再次进行比较,

重复,直到两个索引相遇。

最后复杂性将是:O(n)+ O(nlogn)等于O(nlogn)

答案 1 :(得分:0)

使用MergeSort为O排序数组(n log n) 然后对于每个记录,数组中的r_i使用二进制搜索执行查找记录N-r_i,即O(log n)

对于n个二进制搜索查找,您将具有用于mergeSort + O(n log n)的O(n log n) - > O(n log n)