数组

本文详细探讨了数组这一基本数据结构,从定义、类型、内存分配到操作方法,全面解析数组的工作原理,并通过实例展示了数组在存储和检索大量数据时的效率。同时,讨论了数组与其他数据结构如链表的对比,以及在实际编程中如何选择和优化数组的使用。
摘要由CSDN通过智能技术生成
最简单的数据结构就是数组,是一个连续的内存块。它总是用来代表序列。给定一个数组A,A[i]表示数组中存储的第i+1个对象。获取和更新A[i]花费O(1)的时间。
插入一个已经满了的数组需要resizing,开辟一个新的带有额外空间的数组,把原来数组的元素拷贝过来。这会增加插入操作最坏情况的时间复杂度,但是如果新的数组有一个大于原来数组一个常数因子,平均的插入时间就会是常数,因为resizing并不频繁。
数组中删除一个元素需要把所有后面的元素向左移动一位,为了填补空下来的位置。从长度为n的数组中删除index为i的元素的时间复杂度为O(n-i)。

数组问题常常会有O(n)的空间复杂度的简单粗暴的解法,但是更精妙的解法就是运用数组本身减小空间复杂度到O(1)。
从前面填充一个数组是很慢的,所以要看是否可以从后面写入。
与其删除一个元素(需要移动所有它右边的元素),不如考虑覆盖它。
在处理一个被数组编码的整数时,可以考虑处理整数的位时从数组后面开始。或者,可以翻转数组,因此最低位变成了数组的第一个元素。
熟悉写关于子数组操作的代码。
操作数组时很容易犯off-by-1的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值