;动态数组堆的申请失败的原因
;动态数组
空间特点:空间是连续的
应用场合:
问题规模确定,随机访问频率高(arr[i] 即下标访问不知道值的访问) 数据更新频率低,增加删除操作频率低
例如键盘上的26个英文字母,字母更新频率低(很长时间不增加一个按键),敲击以下键盘相当于随机访问一次(随机访问率高)
;增加O(n)线性阶原因:
1空间不够的时候需重新申请空间
2插入的时候需要整体往后移动元素
3最优的时候,空间够并且尾部插入(不用移动元素) 这个时候出现算法的最优解,O(1)常量阶,所以多多推荐使用者使用尾部插入那么速度最快
;删除O(n)线性阶原因:
1移动元素
算法的最优解O(1),删除最后一个元素不用移动元素直接更改长度和大小
;查询O(n)原因:
1得遍历所有的元素看等不等于要查询的值
2优化成O(log2n)对数阶 每次增加完毕的时候做排序操作,然后查询使用折半查找法查找,缺点是牺牲了增加的效率提高了查询效率,可根据需求权衡
;修改O(1)原因:
1知道要修改的index索引值
2或者知道要修改的值的地址,这个可以在增加的时候返回这个元素的地址,由调用方保存所有值的地址,修改的时候传入地址值就好了
;修改O(n)原因:
1不知道值的索引或者地址,那么就要遍历
2优化成O(log2n),每次增加完做排序操作O(n2这个让增加变得效率低),查询的时候折半查找法,,缺点是牺牲了增加的效率提高了查询效率,可根据需求权衡
如要求查询效率高的地方可以这么干