搜索插入位置 力扣 Python

news2024/12/28 3:46:15

题目描述:

解题代码:

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        if target in nums:
            return nums.index(target)
        else:
            nums.append(target)
            nums.sort()
            return nums.index(target)

题目分析:

时间复杂度分析:


- 如果目标元素在列表中,则最坏情况下需要遍历整个列表,时间复杂度为O(n)。
- 如果目标元素不在列表中,则需要添加元素并排序,时间复杂度为O(nlogn)。

因此,最坏情况下时间复杂度为O(nlogn),平均情况下为O(nlogn)。

空间复杂度分析:


- 如果目标元素在列表中,则不需要额外的空间,空间复杂度为O(1)。
- 如果目标元素不在列表中,则需要添加元素,空间复杂度为O(1)。

因此,空间复杂度为O(1)。

涉及的知识点 :

Python中常见算法的时间复杂度和空间复杂度:

1. 排序算法
- 冒泡排序:时间复杂度O(n^2),空间复杂度O(1)
- 插入排序:时间复杂度O(n^2),空间复杂度O(1)
- 选择排序:时间复杂度O(n^2),空间复杂度O(1)
- 快速排序:时间复杂度O(nlogn),空间复杂度O(logn)
- 归并排序:时间复杂度O(nlogn),空间复杂度O(n)

快速排序的时间复杂度为O(nlogn)是基于平均情况下的分析得出的,具体的计算方法如下:

1. 在平均情况下,快速排序的每一层都会将数组分成两部分,每部分的长度大约为原数组长度的一半,因此快速排序的递归深度为O(logn)。

2. 在每一层中,需要进行一次分区操作,时间复杂度为O(n)。

3. 因此,快速排序的时间复杂度为O(nlogn)。

快速排序的空间复杂度为O(logn),是由于快速排序是一种递归算法,每次递归都需要保存一些状态信息,这些状态信息保存在栈中,因此快速排序的空间复杂度与递归深度成正比,即为O(logn)。在Python编程中,由于Python的递归深度有限制,因此快速排序的空间复杂度可能会受到限制。

2. 查找算法
- 顺序查找:时间复杂度O(n),空间复杂度O(1)
- 二分查找:时间复杂度O(logn),空间复杂度O(1)

3. 图算法
- 深度优先搜索(DFS):时间复杂度O(V+E),空间复杂度O(V)
- 广度优先搜索(BFS):时间复杂度O(V+E),空间复杂度O(V)

4. 动态规划算法
- 斐波那契数列:时间复杂度O(n),空间复杂度O(1)
- 背包问题:时间复杂度O(nW),空间复杂度O(W)

需要注意的是,以上时间复杂度和空间复杂度只是算法的理论复杂度,实际运行时还会受到具体实现、数据规模等因素的影响。

在Python中常见的算法的时间复杂度和空间复杂度如下:

1. 线性时间复杂度 O(n)

线性时间复杂度的算法的执行时间与输入规模成正比,即随着输入规模的增加,执行时间也会相应地增加。例如,遍历一个列表、计算列表中元素的和等操作都是线性时间复杂度的算法。

时间复杂度计算过程:

假设算法的执行时间为T(n),n为输入规模,执行时间与输入规模成正比,即T(n) = k * n,其中k为常数。

空间复杂度为O(1),即不需要额外的空间。

2. 对数时间复杂度 O(log n)

对数时间复杂度的算法的执行时间与输入规模的对数成正比,即随着输入规模的增加,执行时间会增加,但增加的速度会变慢。例如,二分查找算法就是对数时间复杂度的算法。

时间复杂度计算过程:

假设算法的执行时间为T(n),n为输入规模,执行时间与输入规模的对数成正比,即T(n) = k * log n,其中k为常数。

空间复杂度为O(1),即不需要额外的空间。

3. 平方时间复杂度 O(n^2)

平方时间复杂度的算法的执行时间与输入规模的平方成正比,即随着输入规模的增加,执行时间会快速增加。例如,冒泡排序、选择排序等排序算法都是平方时间复杂度的算法。

时间复杂度计算过程:

假设算法的执行时间为T(n),n为输入规模,执行时间与输入规模的平方成正比,即T(n) = k * n^2,其中k为常数。

空间复杂度为O(1),即不需要额外的空间。

4. 指数时间复杂度 O(2^n)

指数时间复杂度的算法的执行时间与输入规模的指数成正比,即随着输入规模的增加,执行时间会非常快速地增加。例如,求解旅行商问题的暴力算法就是指数时间复杂度的算法。

时间复杂度计算过程:

假设算法的执行时间为T(n),n为输入规模,执行时间与输入规模的指数成正比,即T(n) = k * 2^n,其中k为常数。

空间复杂度为O(n),即需要额外的空间来存储递归调用的栈帧。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/616912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0804空间直线及其方程-向量代数与空间解析几何

文章目录 1 空间直线方程1.1 空间直线的一般方程1.2 空间直线的对称式方程1.3 空间直线的参数方程1.4 空间直线的两点式方程 3 两直线的夹角4 直线与平面的夹角4.1 定义4.2 夹角的正弦公式 5 例题6 平面束方程结语 1 空间直线方程 1.1 空间直线的一般方程 空间直线L可以看做是…

【3DsMAX】从零开始建房(4)

目录 1. 制作二层主体 2. 制作二楼顶层栏杆 1. 制作二层主体 将二层的长方体转换为可编辑多边形,将左半部分的点向左移动一点距离 选中左右边线进行连接 移动连接线 选中如下的面挤出 选中一条边线,再点击环形 再点击连接 挤出 选中如下一条边线向上移…

【Windows安装】Windows详细安装nginx部署教程

1、先下载直接去官网nginx.org 点击后就会下载,下载完成后开始安装,其实官网已经告诉了如何安装,右侧“documentation -> nginx windows”就有详细的说明,只是英文而已 2、下载完成后,解压缩,运行cmd&a…

【网络工程师必备知识点】从头认识IPv6!

1. IPv6 的背景 IPv4 地址空间已经消耗殆尽,近乎无限的地址空间是 IPv6 的最大优势 2. IPv6 基本报头 在 IPv4 的基础上增加了流标签,去掉了一些冗余字段,使报文头部的处理更 为简单、高效 3. IPv6 扩展报头 是跟在 IPv6 基本报头后面的可…

自定义类型作为map或者unordered_map的key需要额外做哪些事情

文章目录 1、自定义类型作为map的key2、自定义类型作为unordered_map的key 1、自定义类型作为map的key map中有4个参数&#xff0c;前两个参数是key和val的类型&#xff0c;第三个参数表示比较的仿函数&#xff0c;用于对键值进行比较&#xff0c;默认情况下采用less<Key>…

Shell脚本攻略:shell实现pxe无人值守安装

目录 一、实验 1.shell实现pxe无人值守安装 一、实验 1.shell实现pxe无人值守安装 &#xff08;1&#xff09;脚本截图 1 echo set nu > ~/.vimrc2 systemctl stop firewalld3 setenforce 04 umount /dev/sr0 /mnt5 mount /dev/sr0 /mnt6 cd /etc/yum.repos.d/7 mkdir b…

汇编学习教程:bp 寄存器

引言 我们在此前的学习中已经了解了CPU中众多的寄存器&#xff0c;比如通用寄存器 AX、BX、CX、DX&#xff0c;还有段寄存器 CS、DS、SS、ES。在内存访问和灵活寻址的学习中&#xff0c;我们重点学习了 BX 寄存器和 CX 寄存器。BX 寄存器通常配合 DS段寄存器来实现内存访问&am…

做完瑞吉外卖项目的一点笔记和源码

源码在 https://gitee.com/pluto8/take-out 一、软件开发整体介绍 1、软件开发流程 需求分析 &#xff1a;产品原型&#xff0c;需求规格说明书&#xff08;文档形式&#xff09;设计&#xff1a;产品文档、UI界面设计、概要设计、详细设计、数据库设计编码&#xff1a;项目…

STM32 实现简单定时任务调度器,支持动态添加临时任务

代码实现和硬件没关系&#xff0c;所以并不限于STM32&#xff0c;Arduino 之类的其他地方也能用&#xff0c;只要有一个能获取时间的函数就行&#xff0c;或者说&#xff0c;只要有一个会随着时间自动增加的变量就行&#xff0c;时间单位无所谓&#xff0c;所以确实想的话&…

菜单权限验证和分页功能

权限验证 1.创建数据库&#xff0c;然后测试菜单权限的联合查询语句&#xff1b; 2.创建项目&#xff0c;导入jar包&#xff0c;配置实体类和工具类 3.完成登录功能&#xff0c;当输入用户名和密码正确后跳转到框架页面 编写导航页&#xff08;top.jsp&#xff09;和内容页…

Vscode +Msys2配置C/C++环境

目录 前期准备&#xff1a;Step1: 安装Msys2Step2: 安装编译器Step3: 安装VScodeStep4: 配置VScodec_cpp_properties.jsonlaunch.jsontasks.json Step5: 创建C/C项目 前期准备&#xff1a; 首先&#xff0c;你需要下载并安装以下软件&#xff1a; VsCode&#xff1a;https://c…

软件需求分析-复习指南

这里写自定义目录标题 下面是一段用例的描述&#xff0c;针对一个汽车保险系统中“将一辆新车加入一个已有保单中”的用例。请你为其设计&#xff1a; (1) 领域模型&#xff08;要求给出建立过程&#xff09;(20分)&#xff1b; (2) 活动图 (14分)&#xff1b; (3) 顺序图 (14分…

linux内核open文件流程

打开文件流程 本文基本Linux5.15 当应用层通过open api打开一个文件&#xff0c;内核中究竟如何处理&#xff1f; 本身用来描述内核中对应open 系统调用的处理流程。 数据结构 fdtable 一个进程可以打开很多文件&#xff0c; 内核用fdtable来管理这些文件。 include/linu…

为项目添加 HibernateValidator

HibernateValidatorhttps://hibernate.org/validator/ 引入依赖项 首先&#xff0c;确保已将Hibernate Validator添加到Maven或Gradle依赖项中&#xff1a; <!-- Maven 依赖 --> <dependency><groupId>org.hibernate.validator</groupId><artifa…

三年功能测试经验,投了几百份简历,为什么没有收到offer?

软件测试行业3年多经验&#xff0c;学历大专自考本科&#xff0c;主要测试方向web&#xff0c;PC端&#xff0c;wap站&#xff0c;小程序公众号都测试过&#xff0c;app也测过一些&#xff0c;C端B端都有&#xff0c;除功能外&#xff0c;接口性能也有涉猎&#xff0c;但是不能…

kafka--多易杰哥讲解

Kafka是一种分布式的流式数据平台&#xff0c;广泛应用于实时流数据处理和消息系统。它可以让处理数据的应用程序能够处理高流量的数据流&#xff0c;同时提供可靠性和可扩展性。 【多易教育】-Kafka文档 1.基本概念 1.1什么是kafka Kafka 最初是由 LinkedIn 即领英公司…

教你如何用fiddler抓取https(详细教程)

对于想抓取HTTPS的测试初学者来说&#xff0c;常用的工具就是fiddler&#xff0c;可是在初学时&#xff0c;大家对于fiddler如何抓取HTTPS真是伤了脑筋&#xff0c;可能你一步步按着网上的帖子成功了&#xff0c;那当然是极好的&#xff0c;有可能没有成功&#xff0c;这时候你…

前端基础(JavaScript)——基础语法(变量,分支...) Json对象【重要】 函数定义 事件(未完待续)

目录 引出JS是啥&#xff0c;能干啥基础语法1.变量----let2.怎么打印---console3.if条件分支--啥都可以是条件例子&#xff1a;输入框&#xff0c;打印输入和未输入4.数组push 和 splice&#xff08;2&#xff09;splice&#xff0c;3个参数&#xff0c;索引开始、删除几个&…

广域网技术

广域网互连一般采用在网络层进行协议转换的方法实现。时延网关&#xff0c;更确切的说是路由器。 无连接的网际互连&#xff1a; 在网际层提供路由信息的是路由表&#xff0c;每个站或者路由器中都有一个网际路由表&#xff0c;表的每一行说明一个目标站对应的路由器地址。 路…

如何在Ubuntu20.04中配置 libarchive 库

libarchive 是什么&#xff1f; libarchive是一个开源的压缩和归档库。 它支持实时访问多种压缩文件格式&#xff0c;比如7z、zip、cpio、pax、rar、cab、uuencode等&#xff0c;因此应用十分广泛。 举个例子&#xff0c;我写了一段代码&#xff0c;想要解压一个压缩包&#…