王道考研P7 第六题
【2013年统考真题】已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是()
A. O(n)
B. O(mn)
C. O(min(m,n))
D. O(max(m,n))
答案是D
这道题,书上写的答案我看的很勉强的感觉,然后解析虽然也说了大概,但是一直没有说到我纠结的那个点,就是这最开始是两个升序链表,然后最后他们变成了降序链表, 单链表逆置是不是应该也需要时间?所有我有了下面的思考过程和想法,恳请批评指正!
算最坏情况同理,比如:
链表
n = 4, n = 1,3,5,7
m = 4,m = 2,4,6,8
他们需要比较的次数为m + n - 1,所以时间复杂度为O(m+n),当m和n无穷大时,-1是可以忽略的,再加上单链表逆置的时间复杂度为O(m+n),所以最终结果是O(m+n)+O(m+n)=2O(m+n)。
根据夹逼
O(max(m,n))<=O(m+n)<=2O(max(m,n)),然后O(max(m,n))和2O(max(m,n))就是一个数量级的时间复杂度,最外面两个相等,中间也就和他们相等,所以就可以推出O(m+n)==O(max(m,n)),所以O(max(m,n))+O(m+n)便是2O(max(m,n)),再把系数去掉,就是O(max(m,n))。
这是我对这道题的拙见,最在意的点主要是没有找到其他博主对链表逆置需要时间的解释,所以自己顺着自己的思路写了一些,如有错误恳请批评指正!