下面按照具体的分类来刷题,总结每个思想的精髓。
二分查找 🚶🚶🚶🚶
数组有两个关键词:
- 线性表结构, 就是说元素之间只有前后关系
- 连续的内存空间,存储的是具有相同类型的数据
第二个特征决定了数组“随机访问”的能力,因为我们完全可以通过地址计算出下标对应的位置。比如:
a[i]_add = base_add + i * type_size
有利就有弊,也正是由于内存连续,所以数组的插入和删除是非常低效的,因为为了保持内存的连续,就意味着每次插入/删除都要伴随着大量的移动操作,平均负责度为o(n).
容器类在数组的基础上,封装了插入删除等操作,同时支持了动态扩容. 需要注意的是,如果实现知道数组的大小,最好提前指定容器大小,这样可以省掉多次的内存申请和数据搬移。
大多情况下的解题思路:
- 双指针
- DP
- 二分查找