【发布时间】:2013-10-04 07:02:35
【问题描述】:
我阅读了Find two elements in an array that sum to k 和How can I find two elements in an array that sum to k,因为它们是相关的。
我知道一个 O(n) 解决方案,但我看到一个 O(n logn) 也存在:-
p=0,q=n-1;
while(p<q)
{
if(a[p]+a[q]==k)
{
cout<<a[p]<<"\t"<<a[q];
p++;
q--;
}
else if(a[p]+a[q]>k)
q--;
else
p++;
}
这需要先对数组进行排序。但是由于p和q的值取决于数组中的元素,我们如何断言这个算法的复杂度是O(n Log n)呢?
【问题讨论】:
-
O(n log n) 时间包括排序。
-
在我看来,这个算法的复杂度为 O(n),因为在每次迭代中,您至少要增加或减少一个计数器。
标签: algorithm