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