一、基本概念
1.数组的基本概念
(1)由于数组中的内存是连续的,于是可以根据下标在O(1)的时间内读写任何元素(时间效率很高)
(2)STL的vector每次扩容是新的容量是前一次的两倍。
- STL扩容过程:
把之前的数据复制到新的数组中,再把之前的内存释放。(每一次扩充数组时都有大量的额外操作,这对时间性能有负面影响,因此使用动态数组时要尽量减少改变数组容量的大小的次数) - 注:如果使用vector扩容得到的容量远远大于预期的容量可以使用成员函数
shrink_to_fit()该成员函数可以使得vector缩减到合适的内存空间
resize():该成员函数可以重新分配指定内存空间大小
2.递归的缺点
(1)由于是函数调用自身,而函数调用是有时间和空间消耗的:每一次函数调用都需要在内存中分配空间以保存参数、返回地址及临时变量,而且往栈里压入数据和弹出数据都需要时间。
(2)可能引起更严重的问题:调用栈溢出
- 原因:需要为每一次函数调用在内存中分配空间,而每个进程的栈的容量是有限的。当递归调用的层级太多时,就会超出栈的容量,从而导致栈溢出。
二、涉及的题目概览(🔗会逐步更新)
1.剑指offer及部分公司面试真题
- 面试题3:数组中的重复数组
- 面试题4:二维数组中的查找
- 面试题10:求斐波那契数列第n项
- 青蛙跳台阶问题
- 面试题21:调整数组顺序使奇数位于偶数前面
- 面试题29:顺时针打印矩阵
- 网易2020面试真题
- 面试题40:最小k个数
- 面试题45:把数组排成最小的数
- 面试题51:数组中的逆序对
- 面试题53:在排序数组中数字出现的次数
- 面试题57:和为S的第2个数字
- 面试题66:构建乘积数组
- 面试题13:机器人的运动范围
- 爱奇艺2020面试真题
2.leetCode
- 1 两数之和
- 442数组中重复的数据
- 31下一个排列
- 15:三数之和
- 1035:不相交的线
- 79:单词搜索
- 670:最大交换
- 1002:查找常用字符
- 面试题16.16:部分排序
- 59:螺旋矩阵Ⅱ
- 56:合并区间
- 120:三角形最小路径和
- 53:最大子序和
- 面试题01.07:旋转矩阵
- 1296:划分数组为连续数字的集合
- 面试题01.01:判定字符是否唯一
- 64:最小路径和
- 面试题10.03:搜索旋转矩阵
- 216:组合总数Ⅲ
- 611:有效三角形的个数