力扣
数组
数组
一、数组的本质
- 线性数据结构,物理存储、逻辑存储均连续,是相同数据类型元素的集合
- 最小单元:数组元素,通过下标(索引)定位
二、数组的类型
- 静态数组
- 特点:声明时固定容量,运行中无法修改大小
- 例子:C语言中直接声明的数组
int arr[5];
- 动态数组
- 特点:容量可动态扩容,底层仍基于静态数组实现
- 例子:JavaScript的
Array、Java的ArrayList
- 多维数组
- 分类:二维数组(数组的数组)、三维及以上数组
- 特点:逻辑上是表格/立体结构,物理上仍为连续存储
三、数组的核心操作
- 访问元素
- 方式:通过下标直接访问,下标从0开始
- 核心:根据下标计算内存地址,直接定位
- 插入元素
- 分类:头部插入、尾部插入、指定位置插入
- 核心:尾部插入(容量足够)仅需赋值;其他位置插入需移动后续元素
- 删除元素
- 分类:删除头元素、删除尾元素、删除指定位置元素
- 核心:尾部删除仅需修改长度;其他位置删除需移动后续元素填补空位
- 查找元素
- 方式:顺序查找(遍历比对)、二分查找(有序数组)
- 特点:有序数组可使用二分查找提升效率
四、数组的核心特性
- 访问效率:O(1)(下标直接定位,随机访问能力)
- 插入/删除效率:O(n)(非尾部操作需要移动元素)
- 内存特性:需预分配连续内存空间,可能存在空间浪费
- 适用场景:频繁查询、数据量固定/变化少、需要随机访问的场景