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

这个函数根据节点从尾部的位置获取链接列表中的节点,其空间和时间复杂度是多少?

秦才
2023-03-14

以下解决方案的空间和时间复杂性(最坏情况)是多少?

Node getNodeFromTail(Node head, int x){
    Node p = head;
    Node q = head;

    int diff = 0;

    while (p.next != NULL){
        p = p.next;

        if (diff >= x)
            q = q.next;
        else
            diff++;
    }
    return q;
}

这是对上面代码的解释:
以这个链表为例:1--

x==尾部的值,
当x为0时,结果应为5
当x为1时,结果应为4
当x为2时,结果应为3,依此类推。

这是我的想法:
空间复杂性
恒空间O(1)

时间复杂度
while循环在O(n)时间内遍历链表
其中n=链表的长度。

然而,我认为由于if语句,它有一个额外的复杂性,我觉得应该是O(n-x)时间,因此留给我们的是:O(n)*O(n-x),这几乎是O(n^2)的总体时间复杂性(即二次)<我只是有一种感觉,在最坏的情况下,这并不完全是线性时间<这是正确的吗?

参考:https://stackoverflow.com/a/31190255/12357170

共有1个答案

欧阳晗日
2023-03-14

时间复杂度为O(n)或线性。while循环的条件仅取决于p=p-

 类似资料:
  • 在我的DSA课程期中考试中,我有一个问题: 考虑单个链表包含n个节点(n) 选择一个: a、 O(N)和O(N) B.O(1)和O(1) C.O(1)和O(N) d、 O(N)和O(1) 给出的正确答案是c。O(1)和O(N)。不过我认为正确答案是a。我知道如果N=8,从一开始就需要O(1)时间来找到第8个节点(只需返回尾部节点),但在这种情况下N 提前感谢您能提供的任何帮助。

  • 我很难找出平均和最坏情况下的时间复杂度。因此,我使用以下逻辑删除了BST节点 删除二元搜索树中的节点时,有3种情况 那么,如何计算总体平均时间复杂度和最差时间复杂度??

  • Leetcode问题https://leetcode.com/problems/count-binary-substrings/ 该解决方案有效,但我很难提出递归解决方案的时间复杂度。 每当循环遇到s.charAt(i)!=s.charAt(i 1)时,它都会进行递归调用以展开,直到达到基本大小写或其他部分。 因为我遍历整个字符串,所以for循环是O(n)。但是如何确定将进行的递归调用的数量,因为

  • 我正在玩一个链接列表类项目的指针,我不知道如何创建到新节点的链接。我有一个类,它包含像这样的方法来操作数据结构。我希望这些节点是从csv文件中读取的出价。 当我从CSV加载所有数据时,我想 创建一个新的出价 将新的出价传递给函数 设置Bid对象的nextBid指针,并更新链接列表的尾部 我将不胜感激为每个出价对象创建新地址的任何指针,因为现在尾节点只'记得'第一个出价的地址。 我复制了下面的代码,

  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内

  • 我有一个文本字段和一个列表视图。当用户在文本字段中键入内容时,列表视图中会出现一些建议: 当TextField为空时,通过将可见和托管属性设置为false,ListView将消失。 然而,当用户开始输入时,ListView会占用空间并向下推送所有内容。使用。setManaged(false)允许它不占用任何空间,但它不再显示,因为我还没有为它定义位置。我尝试过设置搜索列表的layoutX和layo