数组——总结篇
本篇是前几篇数组题解的总结篇和理论篇,题目链接:二分查找 704 、 有序数组的平方 977、 移除元素 27、长度最小的子数组 209 。包含数组的简单知识,二分查找总结,双指针总结和选择排序。一. 数组理论知识首先,数组是一种最基本的数据结构,是个非常重要的主题。在这里,借用**《算法图解》**中的比喻辅助理解。既将计算机内存比作抽屉,每一个抽屉放一个待办事项,而数组就是一系列相连的抽屉。但是,鉴于数组是相连的,就会出现一个问题是数组不方便添加新元素。一个长度为四的数组就好比四个相连着的抽屉,当想添加一个元素进去,会发现不管是中间还是末尾都没有空闲抽屉了,因为后面的抽屉有其他东西占着,而一开始数组只分配到了四个抽屉。遇到这种情况,就需要整个数组转移,移到一个可以连着放下这些元素的地方,很显然这样比较麻烦。另一种解决办法就是提前“预留抽屉”,即便现在只需要四个,也要让计算机划出十个位置,以防需要时添加。事实上,这也是使用数组时经常会用到的方法。但同时这种方法也存在两个缺点:额外划定的位置可能用不上,而这将浪费内存。当数组元素超出十个后,又需要转移。下面补充几条数组的基本知识:数组时存放在连续内存空间上的相同类型数据的集合。数组可以通过下标索引的方式获取对应数据,但要注意数组下标都是从**0**开始。数组内存空间的地址都是连续的。正是因为数组在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。例如删除下标为3的元素,需要对下标为3的元素后面的所有元素都要做移动操作。也就是说数组的元素是不能删的,