算法基础(二):数组知识点及题型讲解

news2024/9/20 14:39:27

算法基础(二):数组知识点及题型讲解

  • 1 数组定义
  • 2 Python数组常用操作
    • 2.1 创建数组
    • 2.2 添加元素
    • 2.3 访问元素
    • 2.4 更新元素
    • 2.5 删除元素
    • 2.6 获取数组长度
    • 2.7 遍历数组
    • 2.8 查找某个元素
    • 2.9 数组排序
  • 3 力扣题目训练

一些算法基础知识点和leetcode题解,语言是python。来源于这里。

1 数组定义

数组:在连续的内存空间中,存储一组相同类型的元素。

  • 连续的内存空间:如果在内存空间上不连续,就是链表了。
  • 相同类型:[1,2,3]就是相同类型,而[1,‘a’,1.1]就不是。
  • 数组的索引是从0开始的,表示相对位置。
  • 数组访问(Access):通过索引去访问某一个元素。
  • 数组搜索(Search):查找某一个元素是否存在,如果存在,返回索引。
数组的操作时间复杂度
访问 AccessO(1)
搜索 SearchO(N)
插入 InsertO(N)
删除 DeleteO(N)
  • 访问操作的时间复杂度为什么短?因为不需要遍历:
    在这里插入图片描述
  • 搜索:需要从头到尾遍历数组寻找。最坏的情况是一直找到最末尾的数才找到。
  • 插入:假设在上图中的2后面插入一个数,那么因为数组是连续的,需要把3向后移一位才行。最坏的情况是在索引为0的元素前面插入一个元素,那就要把所有元素全都后移。
    还有一种情况是插入元素后,数组所在的位置已经不够用了,那就需要重新找一个新的位置,把所有的元素全都移进去。
  • 删除:同理,删掉上图中的2后,3要往前移。最坏的情况是删除索引为0的元素,那所有的元素都要往前移。

总结:数组适用于“读”的操作,而不适用于“写”。读多写少。

2 Python数组常用操作

python中没有内置的数组,要用list模拟。

2.1 创建数组

a = []

2.2 添加元素

尾部添加元素:O(1)或O(N)->后者对应位置不够用,要找新位置的情况

a.append(1)
a.append(2)
a.append(3)
# [1,2,3]

中间插入元素: O(N)

a.insert(2, 99)
# [1,2,99,3]

2.3 访问元素

# O(1)
temp = a[2]
print(temp) # 99

2.4 更新元素

# O(1)
a[2] = 88
# [1,2,88,3]

2.5 删除元素

O(N):

a.remove(88)  # 需要从头到尾遍历,找到88,然后删除
# [1,2,3]

a.pop(1)  # 删除索引1对应的元素,后面的元素要前移
# [1,3]

O(1):

a.pop()  # 删除最后一个元素,然后不需要挪动元素
# [1]

2.6 获取数组长度

a = [1,2,3]
len(a)
# 3

2.7 遍历数组

# O(N)
# 方法一:
for i in a:
	print(i)

# 方法二:
for index, element in enumerate(a):  # enumerate()函数会返回索引和元素
	print("Index at ", index, "is: ", element)

# 方法三:
for i in range(0, len(a)):
	print("i: ", i, " element: ", a[i])

2.8 查找某个元素

# O(N)
index = a.index(2)  # 返回这个元素对应的索引
# 1

2.9 数组排序

# O(NlogN)
# 从小到大
a = [3,1,2]
a.sort()
# [1,2,3]

# 从大到小
a.sort(reverse=True)
# [3,2,1]

3 力扣题目训练

【数组】力扣283题:移动0
【数组】力扣27题:移除元素
【数组】力扣26题:删除有序数组中的重复项
【数组】力扣80题:删除有序数组中的重复项 II
【数组】力扣75题:颜色分类

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

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

相关文章

汇编语言1基础知识

机器语言 机器语言是机器指令的集合,即计算机可以执行的指令。 机器指令由一连串二进制数字构成,计算机中用高低电平表示。高电平为1,低电平为0。 早期通过在纸带上打孔输入计算机运算。打孔为1,不打孔为0。 上图出自剧版三体第…

c语言tips-【gcc详细介绍】

0. 什么是gcc GCC 原名为 GNU C语言编译器(GNU C Compiler)GCC(GNU Compiler Collection,GNU编译器套件)是由 GNU 开发的编程语言译器。 GNU编译器套件包括C、C、 Objective-C、 Java、 Ada 和 Go语言前端&#xff0c…

【GPLT 二阶题目集】L2-009 抢红包

没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录,请你统计一下他们抢红包的收获。 输入格式: 输出格式: 按照收入金额从高到低的递减顺序输出每个人的编号和收入金额(以元为单位,输出小数点后2位&a…

ISIS与OSPF的双点双向简介与配置,双点双向中存在的问题(次优路径与环路风险)

2.4.0 ISIS与OSPF的双点双向简介与配置,双点双向中存在的问题 关于双点双向的相关概念 单点双向 网络中连接外网的设备称为出口网关设备 ,通常小型网络中仅有一台出口网关设备。 网络中仅存在一台出口设备与外网设备对接时相互引入对端的路由&#xf…

学长教你学C-day12-C语言函数

不知不觉,小刘已经讲了十一天C语言了,语法、数据结构、数组、结构体、指针的概念和使用大家都已经了然于心,但是想用C语言开发一个有用的程序还需要一个很关键的部分,那就是编写“函数”。 “函数这个名字大家肯定都不陌生&#x…

ZooKeeper架构篇 - 分布式协调服务ZooKeeper

前言 本文基于 ZooKeeper 3.8.0 版本。 ZooKeeper集群搭建 准备四台服务器,IP地址分别为10.211.55.6、10.211.55.7、10.211.55.8、10.211.55.9 下载并解压 ZooKeeper 文件,四台服务器进入 data 目录分别创建一个 myid 文件,文件内容分别为…

vue全家桶(二)组件化开发

vue全家桶(二)组件化开发1.组件化开发思想2.组件注册2.1局部注册2.2全局注册Vue.component1.注意事项:2.组件的命名方式3.组件间的交互3.1父组件向子组件传值-props属性值类型1.组件化开发思想 标准分治重用组合 2.组件注册 vue 注册组件的…

《动手学深度学习》笔记一 ------机器学习中的基础概念

写在前面:本文按照书中的脉络做的笔记,包含概念的定义、自己的理解以及阅读时的小思考。感受:深度学习很奥妙,很有趣! 1.2机器学习中的关键组件 可以⽤来学习的数据(data);如何转换…

直接在Notepad++中运行GO语言

建议先阅读并实践(配置notepad支持go语言语法着色(高亮)):https://mp.csdn.net/mp_blog/creation/editor/new/1287591911.Windows上安装Go语言开发包参考链接:http://c.biancheng.net/view/3992.html1.1.下载Go语言开发包可以在Go语言官网 &a…

大聪明教你学Java | 深入浅出聊 Mybatis 的一级缓存和二级缓存

前言 🍊作者简介: 不肯过江东丶,一个来自二线城市的程序员,致力于用“猥琐”办法解决繁琐问题,让复杂的问题变得通俗易懂。 🍊支持作者: 点赞👍、关注💖、留言&#x1f4…

【头歌】函数的递归调用

第1关:编写递归函数方法求x的n次方 (要求n>0)任务描述本关任务:编写递归函数方法求x的n次方 (要求n>0)。相关知识递归法在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。若调用自身,称之为直接递归。若过程…

论文笔记:SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS

ICLR 2017 1 abstract和intro部分 问题的setting 在图上进行节点分类,其中只有一部分节点有label ——>基于图的半监督学习传统的方法是使用平滑正则 其中L0表示图中有监督部分的lossf是神经网络,ΔD-A表示unnormalized的拉普拉斯矩阵 这种方…

Blender 物理属性 (五)动态绘画

文章目录动态绘画简介.以小船划过水面产生波纹为例.波浪属性.动态绘画简介. 1 动态绘画可以让一个物体在另一个物体上绘制东西 2 动态绘画至少需要两个物体,一个作为画布,另一个作为笔刷 3 两个物体必须接触才有效果 以小船划过水面产生波纹为例. 1 为…

【数据结构】浅识泛型

目录 1、包装类 1.1、基本数据类型和其包装类 1.2、装箱和拆箱 1.2.1、装箱 1.2.2、拆箱 1.2.3、面试题 2、泛型的概念 3、引出泛型 3.1、语法 4、泛型类的使用 4.1、语法 5、裸类型(Raw Type) 6、泛型是如何编译的 6.1、擦除机制 6.2、不…

Springboot+ssm371的在线考试系统maven idea

摘 要 I 1 绪论 1 1.1研究背景 1 1.2研究现状 1 1.3研究内容 2 2 系统关键技术 3 springboot是基于spring的快速开发框架, 相比于原生的spring而言, 它通过大量的java config来避免了大量的xml文件, 只需要简单的生成器便能生成一个可以运行的javaweb项目, 是…

DPO4104示波器

18320918653 DPO4104 详细说明: 美国泰克Tektronix DPO4104数字荧光示波器主要产品特色:Inspector智能存储管理2.串行触发和分析3.10.4”更大的显示器, 前面板上USB和CompactFlash端口, 及TekVPI?改善的探头接口, 更强的操作渐 变性商品名称 &#x…

针孔相机模型

针孔相机模型坐标系(1) 图像像素坐标系(2) 图像物理坐标系(3) 相机坐标系(4) 归一化平面坐标系(5) 世界坐标系畸变校正针孔相机模型中一般会涉及到图像像素坐标系、图像物理坐标系、相机坐标系、归一化平面坐标系和世界坐标系这5个坐标系。 坐标系 (1) 图像像素坐标系 图像像…

IDEA设置界面和控制台的滚动条颜色

前言 不知道大家是否和我一样有这么一个烦恼: IDEA自带的滚动条颜色很暗,配上一些主题颜色搭配很难发现。 所以今天就想着怎么可以修改滚动条颜色,首先去网上搜了搜都是什么鼠标滚轮加shift滚动,一点也不实用 偶然看到了个不错的…

图表控件LightningChart.NET 系列教程(七):LightningChart 组件——LightningChart.NET 函数库

LightningChart.NET SDK 是一款高性能数据可视化插件工具,由数据可视化软件组件和工具类组成,可支持基于 Windows 的用户界面框架(Windows Presentation Foundation)、Windows 通用应用平台(Universal Windows Platfor…

匿名函数 lambda

匿名函数 lambda 匿名函数:一句话函数,比较简单的函数,没有函数名的函数 在Python中,lambda的语法是唯一的 lamlambda a,b:ab lamlam(a1,b2) # 传参 print(lam) # 3lmbda的语法是唯一的。其形式如下:lambda argument_list: expr…