关于数组我所知道的

简介: 关于数组我所知道的

image.png


关键词:基础 线性 连续


数组是什么


相同类型的数据的组合。

数组是一种线性表数据结构。将一组相同类型的数据存储在连续的内存空间。

线性表: 数据最多只有前和后两个方向的数据结构(数组和链表)。

数组连续的存储空间的特点,带来的优劣势:

  • 优势:“随机(直接)访问”。
  • 劣势:删除、插入操作变得低效, 复杂度为O(n)。为保证连续性,需要把数据往后移。


数组各个操作的复杂度


读取 O(1)


通过下标直接访问。再次强调一遍:得益于数组连续存储的特点。


查找 O(n)


通过遍历来查找O(n) ,用二分法复杂度是O(logn)

链表更适合插入、删除,时间复杂度 O(1)。


插入 O(n)

如果是数组末尾插入元素,那复杂度会是O(1),因为不用挪数据。


image.png


当添加的位置在数组中间时,需要把位置后面的数组往后挪一个位置。因此复杂度为O(n)。



image.png

如果数组是乱序的,那就直接数组末尾插入元素。复杂度O(1)。


删除 O(n)


当删除的数据在数组末尾时,直接将数组最后的元素去除,释放资源就可以。复杂度O(1)。

当目标元素在数组中间时,先把数据拿出,然后把改数据后面的元素一个个往前推,最后释放内存。复杂度O(n)。


image.png




衍生:集合


集合就是一个带有“不允许重复”这种简单限制的数组。而该限制也导致它的 插入 与数组性能不同。多了个查找的步骤。

插入步骤:

  1. 查找。确定元素不存在于数组中
  2. 插入。就是数组的正常插入。


leetcode



写题目看看自己是否掌握了数组的特性吧。

  • 11 盛最多水的容器
  • 26 删除排序数组中的重复项
  • 41 缺失的第一个正数
  • 88 合并两个有序数组
  • 169 多数元素

相关代码

参考资料:《数据结构与算法题解》 《我的第一本算法书》

目录
相关文章
|
5月前
|
存储 C语言
|
6月前
|
Java
数组的练习
数组的练习
|
5月前
数组(3)
数组(3)
34 2
|
5月前
|
存储 算法 编译器
数组(1)
数组(1)
32 0
|
6月前
|
存储 搜索推荐 程序员
C++ 数组
C++ 数组
46 0
|
6月前
|
存储 C++ 索引
C++数组
C++数组
|
6月前
|
存储 人工智能 算法
4.为何数组下表从0开始
4.为何数组下表从0开始
63 1
|
6月前
|
机器学习/深度学习 人工智能 JavaScript
数组练习
数组练习。
36 0
|
机器学习/深度学习 Java
【数组的使用】
【数组的使用】
45 0
数组相关练习
数组相关练习
53 0