gpt4 book ai didi

java - 这个(简单的)代码的时间复杂度是多少?

转载 作者:搜寻专家 更新时间:2023-10-31 20:28:50 25 4
gpt4 key购买 nike

我试图找出下面代码的运行时间,无论列表是数组列表还是链表。我很感激任何建议!

数组:我认为删除操作是O(n),循环是N/2,所以O(n^2)

LinkedList:只有引用发生变化,所以删除的时间是恒定的,循环的时间是 N/2,所以 O(n)

int halfSize = lst.size() / 2;

for (int i = 0; i < halfSize; i++){
lst.remove(0);
}

最佳答案

数组列表: 评估正确,由于基础 array copy

    public E remove(int index) {
rangeCheck(index);

modCount++;
E oldValue = elementData(index);

int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work

return oldValue;
}

链表:评估正确,节点删除@零索引是常量

public E remove(int index) {
checkElementIndex(index);
return unlink(node(index));
}

/**
* Returns the (non-null) Node at the specified element index.
*/
Node<E> node(int index) {
// assert isElementIndex(index);

if (index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}

关于java - 这个(简单的)代码的时间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19072843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com