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

标签 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) 中实现它?

最佳答案

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

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

不过,一个更快的解决方案是使用 HashMap 之类的东西在 O(N) 时间内解决问题。

关于algorithm - 无法计算出该算法的运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19482130/

相关文章:

c++ - 多个凸形角连接

javascript - 如何跳过两个相同数组索引之间的比较?

algorithm - 带链接的哈希表(表加倍)

algorithm - 使用 Map/Reduce 计算自举算法

c++ - 在 C++、结构或类中应该使用什么来创建链接列表

c++ - 为什么双端队列比队列快?

algorithm - 关于位计数器的说明

将颜色着色一定百分比的 C# 算法

python - 覆盖大小为 n*m 的矩形中的单元格 p、q 的大小为 x、y 的子矩形的数量

algorithm - 至少有 3 个连续相同字符的二进制子串数