1、数组
1.1 集合、列表、数组
集合:由一个或多个确定的元素所构成的整体
集合特点:集合中的元素类型不一定相同;无序
列表(又称线性列表):即按照一定的线性顺序,排列而成的数据项的集合。–数组和链表
列表特点:有序;长度可变
数组:列表的一种 实现方式,python中数组list。
数组特点:列表中没有索引,而数组有索引。数组中元素在内存中是连续存储的,且每个元素占用相同大小的内存。but列表的另一种实现方式——链表,它的元素在内存中则不一定是连续的
1.2 数组操作:
读取元素
1,找到该数组的索引 0 的内存地址;2,将内存地址加上索引值,作为目标元素的地址。
时间复杂度是常数级别,为 O(1)。
查找元素
从数组开头逐步向后查找
查找元素的时间复杂度为 O(N)
插入元素
移动出空位后,再插入
如果频繁地对数组元素进行插入操作,会造成时间的浪费
删除元素
删除掉数组中的某个元素后,数组中会留下 空缺 的位置,要保证在内存中是连续的,这就使得后面的元素需对该位置进行 填补 操作。
时间复杂度为 O(N)
双指针技巧
分别将两个指针分别指向数组的开头及末尾,然后将其指向的元素进行交换,再将指针向中间移动一步,继续交换,直到这两个指针相遇。
使用双指针的场景之一:从两端向中间迭代数组。这种技巧经常在排序数组中使用
使用双指针的场景之二:可以使用两个不同步的指针来解决问题,即快慢指针。与情景一不同的是,两个指针的运动方向是相同的,而非相反。关键:确定两个指针的移动策略