我正在解决面试练习中的问题,但似乎无法找出以下问题的时间和空间复杂度答案:
给定两个已排序的链表,将它们合并到第三个链表中以排序顺序。假设我们使用降序排序。
我遇到的一个答案显然不是最有效的,是以下递归解决方案:
现在,当我分析这个函数的复杂度时,遇到了一个问题。我不确定是
总之:
在大O符号表示法中,
给定两个已排序的链表,将它们合并到第三个链表中以排序顺序。假设我们使用降序排序。
我遇到的一个答案显然不是最有效的,是以下递归解决方案:
Node mergeLists(Node head1, Node head2) {
if (head1 == null) {
return head2;
} else if (head2 == null) {
return head1;
}
Node newHead = null;
if(head1.data < head2.data) {
newHead = head1;
newHead.next = mergeLists(head1.next, head2);
} else {
newHead = head2;
newHead.next = mergeLists(head1, head2.next);
}
return newHead;
}
现在,当我分析这个函数的复杂度时,遇到了一个问题。我不确定是
O(M + N)
还是O(M) + O(N)
。我无法得出一个直观的答案。对我来说,这个函数的运行时间和空间复杂度似乎是O(N) + O(M)
或O(max(N,M))
,因为较大的值会驱动渐近曲线(或递归调用和堆栈帧创建)。总之:
在大O符号表示法中,
O(N+M)
和O(N) + O(M)
有什么区别?它们是否有任何区别?如果它们不同,我将感激有人提供简单的示例。