当前位置: 首页 > 知识库问答 >
问题:

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

祁英哲
2023-03-14

我被要求为这个问题编写一个算法:给我们一个数组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个答案

蒋华美
2023-03-14

这里是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)
贺博厚
2023-03-14

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

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

然而,更快的解决方案是使用类似于< code>HashMap的东西在< code>O(N)时间内解决问题。

 类似资料:
  • 我这里有一个算法。 点击这里查看算法图像 它的作用是遍历一个数组并找到3个最大值并返回它们的总和。例如,数组[1,2,3,4,5]将返回12(3 4 5=12)。 图像中的算法说它是O(nlogk)。但这是我无法理解的。 以下是我对图像中第一个循环的看法: Heap的方法“插入()”和“删除()”,它们都取O(logn)。所以在first for循环中,它通过添加它们的运行时来生成O(2*logn

  • 本文向大家介绍Python计算程序运行时间的方法,包括了Python计算程序运行时间的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python计算程序运行时间的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 可能的重复: 如何测量函数的运行时间? 我有一种I/O计时方法,它将数据从一个位置复制到另一个位置。计算执行时间的最佳和最真实的方法是什么<代码>线程<代码>定时器<代码>秒表?还有其他解决方案吗?我想要最准确的,尽可能简短的。

  • 问题内容: 我有两张桌子 WAC表 基准表 预期结果 要找到的公式是 基准*(1 +(wac_inc / 100)) SQLFIDDLE 在这里,对于每一行,上一行的值是,对于第一行,其值将来自。 希望我说清楚。我们可以使用AFAIK来做到这一点,但我想尽可能 避免 。谁能建议我这样做的更好方法。 问题答案: 尝试: 输出: 编辑1 我试图实现LOG EXP技巧,但除非@usr将我引向解决方案,否

  • 利用广度优先搜索或深度优先搜索,在线性时间内(根据图的顶点和边的个数)计算图的连通分量是很简单的。在任何一种情况下,从某个特定顶点v开始的搜索都将在返回之前找到包含v(不再包含)的整个连通组件。若要找到图的所有连通分量,请循环遍历图的顶点,每当循环到达以前发现的连通分量中尚未包含的顶点时,就开始新的广度优先或深度优先搜索。 这个操作的运行时间是多少?我遇到过一些消息来源,说连接的组件是在时间内完成

  • Itinerary类存储有关具有以下成员的旅程的信息: •一个名为flights的私有ArrayList数据字段,其中包含按DepartureTime递增顺序排列的旅程航班。(提示:您不需要进行排序。) •使用ArrayList类型的指定航班创建旅程的构造函数。 •名为getTotalFlightTime()的方法,以分钟为单位返回旅程的总飞行时间。(提示:为每个飞行对象调用getFlightTi