两个升序链表合并成一个降序链表的时间复杂度

王道考研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))。

这是我对这道题的拙见,最在意的点主要是没有找到其他博主对链表逆置需要时间的解释,所以自己顺着自己的思路写了一些,如有错误恳请批评指正!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值