无法计算出该算法的运行时间

时间:2013-10-20 19:56:59

标签: algorithm data-structures

我被要求为这个问题编写算法:我们给出了数组A,我们想知道数组中是否有任何两个元素U和L,其中U + L = K

我写了这样的算法:

while(first<last)
{
  if(arr[first]+arr[last]==k)
     return true
  else if(arr[first]+arr[last]<k)
     last=last-1;
  else
     first++;
}
return false   

}

但问题是这个算法的运行时间是什么?是O(nlogn)吗?如果是,为什么?如果不是,我怎样才能在O(nlogn)中实现它?

2 个答案:

答案 0 :(得分:1)

算法的运行时间为O(N),因为在最坏的情况下,您最终会迭代整个数组。

虽然你的算法无法解决问题。例如,考虑{9,1,3,4,2}。在这种情况下,如果k12,则返回false。对于您的算法,应首先对输入数组进行排序,然后将其传递给算法,在最坏的情况下将采用O(NlogN)

然而,更快的解决方案是使用类似HashMap的内容来解决O(N)时间内的问题。

答案 1 :(得分:1)

以下是python中alg的一个小例子,结果为false,但列表中有两个元素可以满足U + L = k

def testArray(a, k):
    first = 0
    last = len(a) - 1

    while (first < last):
        print first, last
        if (a[first] + a[last] == k):
            return True
        elif (a[first] + a[last] < k):
            last=last-1
        else:
            first=first+1
    return False

a = [3, 1, 5, 3, 6]
print testArray(a, 6)