关于数组我所知道的

89 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

关键词:基础 线性 连续

数组是什么

相同类型的数据的组合。

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

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

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

  • 优势:“随机(直接)访问”。
  • 劣势:删除、插入操作变得低效, 复杂度为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 多数元素

相关代码

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