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

article/2025/7/22 10:05:16

王道考研P7 第六题
【2013年统考真题】已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是()
A. O(n)
B. O(mn)
C. O(min(m,n))
D. O(max(m,n))

答案是D

注意,此题中的时间复杂度并不是指移动的次数,因为你无论如何怎么移动,移动的次数都是m+n,这里指的是链表中元素的比较次数。

比较的最好情况是一个链表n比另一个链表m短,并且链表n的最大元素比链表m的最小元素小,所以比较的时间复杂度是O(min(n,m))

为什么是O(min(n,m))??
如下图所示
在这里插入图片描述
比较抽象,介意勿怪

很显然,只要把链表n的三个元素分别去跟链表m的第一个元素即4去比较,比较完后再把m链表插在后面。比较的次数就是n的的长度。

下面我们再来看看比较的最坏情况

如下图所示
在这里插入图片描述
双指针比较的话,步骤如下
指针分别指向n[1]和m[1]
①1和2比较,1小,出去了,n指针指向3,m指针还是指向2
②2和3比较,2小,出去了,n指针指向3,m指针指向4
③3和4比较,3小,出去了,n指针指向5,m指针指向4
④4和5比较,4小,出去了,n指针指向5,m指针指向6
⑤5和6比较,5小,出去了,n指针指向7,m指针指向6
⑥6和7比较,6小,出去了,n指针指向7,m指针指向8
⑦7和8比较,7小,出去了,n链表结束,8插在7后面

所以一共比较了m+n-1

在最坏情况下,不管n和m是多长,只要相互交错的情况下,比较的次数就是m+n-1

例如下面的情况也是m+n-1
在这里插入图片描述
n链表中5比较了三次,8比较了三次,10比较了三次,13比较了三次,一共是4+6-1=9次

但是,答案中并没有O(n+m-1)或O(n+m)这个选项
注:当n和m无限大的时候,-1忽略掉

这里就需要提醒的是,时间复杂度是一个级数概念,即O(2n),O(n+1000),,O(n-50),都是属于O(n)这个级别(范畴)
并且是一个
线性变化的常数项级
,同理O(m)也一样

包括取大去小原则
如果一个算法的时间复杂度是n3+n2+n+1
那么算法复杂度是O(n3)

回到题目,如果我们以链表m长度远大于链表n的情况下来看,那么在相互比较的情况下,O(m+n)是否可以看成O(m)?同理,如果我们以链表n长度远大于链表m的情况下来看,O(m+n)是否可以看成O(n)?

那么结论就是:O(m+n)==O(max(m,n))

当然也可以用夹逼定理去说明这个结论
O(max(m,n))≤O(m+n)≤2O(max(m,n))
2O(max(m,n))还是属于O(max(m,n))这个级别
所以可证:O(m+n)==O(max(m,n))

所以答案就是D

本篇博客有参考本题类似的解答(一开始我也对这题的答案感到不解,去百度搜了下,最后总结),研友在参考解答的时候也可以提出自己的疑问!


http://chatgpt.dhexx.cn/article/2EmCH7Xo.shtml

相关文章

无线传感器网络路由优化中的能量均衡LEACH改进算法

文章目录 一、理论基础1、LEACH算法概述2、改进的LEACH算法 二、算法流程图三、仿真实验与分析四、参考文献 一、理论基础 1、LEACH算法概述 请参考这里。 2、改进的LEACH算法 改进的LEACH算法(LEACH-N)主要针对LEACH算法分簇阶段的缺陷而改进的&…

机器学习之自适应增强(Adaboost)

1.Adaboost简介 **Adaptive boosting(自适应增强)是一种迭代算法,其核心思想是针对同一个训练集训练不同的弱分类器,然后把这些弱分类器集合起来,构成一个强分类器,Adaboost可处理分类和回归问题。了解Adaboost算法之前&#xff…

自适应阈值(adaptiveThreshold)分割原理及实现

背景介绍及原理 前面介绍了OTSU算法和最大熵算法,但这两种算法都属于全局阈值法,所以对于某些光照不均的图像,这种全局阈值分割的方法会显得苍白无力,如下图: 显然,这样的阈值处理结果不是我们想要的&…

优化算法+神经网络:神经网络自动参数优化

当智能群优化算法遇上神经网络 优化算法进行神经网络的参数寻优,解放深度调参1.已经实现的Genetic Algorithm优化Neural Network2.已经实现的PSO优化Neural Network3.已实现的SSA[^1]优化Neural Network 三种方法的可视化搜索过程对比三种优化算法性能总结总结目前来…

Java stream().sorted()实现排序(升序、降序、多字段排序)

1 自然排序 sorted()&#xff1a;自然排序&#xff0c;流中元素需实现Comparable接口 package com.entity;import lombok.*;Data ToString AllArgsConstructor NoArgsConstructor public class Student implements Comparable<Student> {private int id;private String …

linux centos查找某个文件,Linux查找命令(文件、文件中的关键字)

1、grep &#xff1a;查找文件中的内容 $ grep [option] pattern [file] 例&#xff1a; $ grep un day Sunday 例: $grep include doulinked.c doulinked1.c doulinked.c:#include doulinked.c:#include doulinked.c:#include doulinked1.c:#include doulinked1.c:#includ…

Linux下查找\命令(收集整理)

以下为总结&#xff0c;其实可直接跳过&#xff0c;查看locate部分&#xff0c;这个是类似windows下verything搜索工具&#xff01; 一.Linux查找文件的相关命令 常 用 命 令 简要中文说明 程序所在目录 whereis 寻找文件工具 /usr/bin find 寻找文件工具 /usr/bin l…

Linux查找命令 which和find命令

目录 前言一、which命令二、find命令 前言 一、which命令 格式&#xff1a; which [选项] 命令|程序名 #默认当找到第一个目标后不再继续查找选项说明-a查找全部内容&#xff0c;而非第一个文件-n<文件名长度>  指定文件名长度&#xff0c;指定的长度必须大于或等于所有…

Linux文件查找的4个命令

1. find find 命令应该是最经典的命令了&#xff0c;谈到搜索工具第一个想到的肯定是 find 命令。但是&#xff0c;find 命令非常强大&#xff0c;想要把它的功能都介绍一遍&#xff0c;恐怕要写好几篇文章。 所以&#xff0c;这里介绍最基本的&#xff0c;根据文件名查找文件…

Linux下的查找命令合集(which/whereis/locate/find)

Linux 下的查找命令有很多&#xff0c;常用的有which、whereis、locate、find。那么这4个命令之间各自有什么特点&#xff0c;又有什么区别&#xff0c;什么时候该用哪个才最合适呢&#xff1f;方便我们在开发和学习中能更加有效的使用。 1、which 该命令主要是用来查找系统P…

【Linux命令】查找文件命令

文章目录 一、查找文件locateupdatedbfind测试条件操作符操作预定义操作自定义操作 find命令选项&#xff08;常用&#xff09; 一、查找文件 locate locate命令会查找其路径名数据库&#xff0c;输出所有包含查找字符串的匹配项&#xff1a; locate settings.xmlupdatedb …

Linux常用查找命令

1、命令名称&#xff1a;which&#xff08;查看命令文件位置和命令可能出现的别名&#xff09; which 命令 2、whereis&#xff08;查找命令及帮助文档所在位置&#xff09; whereis 命令 3、locate&#xff08;按照文件名查找&#xff0c;按照数据库查找&#xff09; locate…

【Linux学习笔记】8. Linux查找命令:find和grep详解

Linux查找命令 find查找文件grep查找字符串 1. find命令 有多种使用方式&#xff1a; 根据文件名搜索根据文件大小搜索根据文件类型搜索根据修改时间搜索根据文件权限搜索根据文件所有者搜索 上面的各种方式可以利用逻辑与或非组合起来使用。 功能一&#xff1a;按文件名…

linux查找命令,文件就这些which,whereis,locate,find,grep,|

linux生产中我们经常需要查看某个软件是否安装&#xff0c;某个文件在哪里等&#xff0c;某个命令是否存在等。 1. which 查看可执行文件的位置 which命令的作用是&#xff0c;在PATH变量指定的路径中&#xff0c;搜索某个系统命令的位置&#xff0c;并且返回第一个搜索结果…

linux 查找命令

CentOS Linux学习笔记总结(八十六)-CentOS Linux系统的查找命令find find命令是用于在指定目录下查找文件,并可以对查找到的文件进行指定的操作。它的查找是从指定目录开始,并向下递归搜索它的所有各个子目录,查到后标准输出,并对其进行指定操作。 find语法: find [参…

Linux下4个查找命令which、whereis、locate、find

1.which 作用:从环境变量PATH中,定位、返回与指定名字相匹配的可执行文件所在的路径 原理:执行which命令时,which会在当前环境变量PATH中依次寻找能够匹配所找命令名字的可执行文件 适用场合:一般用于查找命令、可执行文件所在的路径 2.whereis 作用:定位、返回与指定名字…

Linux 查找命令(find、locate 、grep )

学习Linux系统的第五篇博客&#xff1a;学习如何查询文件。 一、find 命令 作用&#xff1a; 在指定范围内迅速查找到文件。 用法&#xff1a; find 路径 参数 文件名 例如&#xff1a; 查找自己账户下文件名为test.txt的文件 命令&#xff1a;find /home/ygt -name test.tx…

景区门票管理系统

1、项目介绍 景区门票管理系统拥有两种角色 管理员&#xff1a;景点管理、留言管理、用户管理、订单管理等 用户&#xff1a;留言、门票购买、修改个人信息等 2、项目技术 后端框架&#xff1a; Servlet、mvc模式 前端技术&#xff1a;Bootstrap、jsp、css、JavaScript、…

景点景区门票购买核销宴会活动报名公众号系统开发

景点景区门票购买核销宴会活动报名公众号系统开发 功能特性 1.活动管理 可以新建一场或多场活动&#xff0c;管理每一场活动&#xff1b;与此同时&#xff0c;可以添加多张收费或免费门票&#xff0c;满足特定的需求&#xff1b;填写举办城市后&#xff0c;客户可通过定位服务&…

条件判断练习:门票价格【Python练习】

if-else语句 在 Python 中&#xff0c;if-else语句用于控制程序执行&#xff0c;基本形式为&#xff1a; if 判断语句1&#xff1a; step1 else:step2当判断语句1为真时&#xff0c;执行step1&#xff0c;否则执行step2。例如&#xff1a; name choose #判断变量name是否…