试图了解这种算法的空间复杂性

时间:2016-02-10 19:28:58

标签: algorithm big-o space-complexity

我在网上看到很多文章解释了时间的复杂性,但没有找到任何能很好地解释空间复杂性的好文章。我试图解决以下面试问题

  

您有两个由链接列表表示的数字,其中每个节点   包含一个数字。数字以相反的顺序存储,例如   Ts数字位于列表的头部。写一个函数   添加两个数字并将总和作为链表返回。

     

实施例

     

输入:(7-> 1 - > 6)+(5-> 9-> 2)。即617 + 295。

     

输出:2 - > 1 - >那就是912。

我的解决方案如下:

private Node addLists(Node head1, Node head2) {
    Node summationHead = null;
    Node summationIterator = null;
    int num1 = extractNumber(head1);
    int num2 = extractNumber(head2);
    int sum = num1 + num2;

    StringBuilder strValue = new StringBuilder();
    strValue.append(sum);
    String value = strValue.reverse().toString();
    char[] valueArray = value.toCharArray();
    for (char charValue : valueArray) {
        Node node = createNode(Character.getNumericValue(charValue));
        if (summationHead == null) {
            summationHead = node;
            summationIterator = summationHead;
        } else {
            summationIterator.next = node;
            summationIterator = node;
        }
    }
    return summationHead;
}

private Node createNode(int value) {
    Node node = new Node(value);
    node.element = value;
    node.next = null;
    return node;
}

private int extractNumber(Node head) {
    Node iterator = head;
    StringBuilder strNum = new StringBuilder();

    while (iterator != null) {
        int value = iterator.element;
        strNum.append(value);
        iterator = iterator.next;
    }
    String reversedString = strNum.reverse().toString();
    return Integer.parseInt(reversedString);
}

有人可以为此推断空间复杂度吗?感谢。

1 个答案:

答案 0 :(得分:1)

空间复杂性意味着"运行此算法所需的空间量如何随着输入变大而渐近变化"?

所以你有两个长度为N和M的列表。结果列表的长度为max(N,M),如果有一个进位,则可能为+1。但是+1是一个常数,我们不认为它是Big-O的一部分,因为N或M中的较大者将占主导地位。

另请注意,这个算法很简单。没有中间计算需要大于线性的空间。

空间复杂度为max(N,M)。