我熟悉以下两种方法的运行时间,即O(N)。但是,我不熟悉空间复杂性。由于这些方法只包含赋值语句,比较语句和循环,我假设空间复杂度只是O(1),但是要确保。谢谢。
//first method
public static <E> Node<E> buildList(E[] items) {
Node<E> head = null;
if (items!=null && items.length>0) {
head = new Node<E> (items[0], null);
Node<E> tail = head;
for (int i=1; i<items.length; i++) {
tail.next = new Node<E>(items[i], null);
tail = tail.next;
}
}
return head;
}
//second method
public static <E> int getLength(Node<E> head) {
int length = 0;
Node<E> node = head;
while (node!=null) {
length++;
node = node.next;
}
return length;
}
答案 0 :(得分:1)
如this post所述,空间复杂度与算法使用的内存量有关,具体取决于输入的大小。
例如,O(1)
空间复杂度的算法使用固定数量的内存,与输入大小无关。这是你的第二个算法的情况,基本上只使用一些额外的变量。
O(n)
空间复杂度的算法使用与其输入大小成比例的内存量。这是您的第一个算法的情况,该算法为输入的每个元素执行一次分配(一个new
)。