我在网上看到很多文章解释了时间的复杂性,但没有找到任何能很好地解释空间复杂性的好文章。我试图解决以下面试问题
您有两个由链接列表表示的数字,其中每个节点 包含一个数字。数字以相反的顺序存储,例如 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);
}
有人可以为此推断空间复杂度吗?感谢。
答案 0 :(得分:1)
空间复杂性意味着"运行此算法所需的空间量如何随着输入变大而渐近变化"?
所以你有两个长度为N和M的列表。结果列表的长度为max(N,M),如果有一个进位,则可能为+1。但是+1是一个常数,我们不认为它是Big-O的一部分,因为N或M中的较大者将占主导地位。
另请注意,这个算法很简单。没有中间计算需要大于线性的空间。
空间复杂度为max(N,M)。