数据结构与算法之数组

44 篇文章 0 订阅
38 篇文章 0 订阅

数组知识点:

1)数据存储方式:顺序存储、非顺序存储。

2)顺序存储就是把数据存储在一块连续的空间内,比如数组。非顺序存储就是数据不在一块连续的空间,比如链表。

3)在创建数组的时候,会在内存中划分出一块连续的空间存储数据,插入数据的时候,将数据按照顺序存储在连续的内存      中,读取的时候,通过数组的索引读取。

4)数组名就是指针,指向数组的起始地址。

5)数组的类型可以告诉编译器,访问下一个数据的时候,一个数据占有多少字节。

6)由于数据连续存储,所以在读取的时候容易,可以根据索引取值,随机访问速度快,但是插入和删除费劲,插入和删除的  时候需要移动大量的元素。所以,如果需求是快速访问数据,但是很少插入和删除,可以使用数组。

7)对于python而言,List就是动态指针数组。当List中没有足够的空间存储新的数据时,list会动态的改变大小,来容纳新的元  素,每次改变大小的时候会预留出一部分空间,来降低改变大小的频率。

8)查找的时候可以根据索引找,如果要求元素值查找,可以使用二分查找,在数据量大的时候尤其明显。查找的时候可以对数组进行排序,然后进行查找。

9)有序数组查找复杂度:O(logn),插入复杂度:O(n);无序数组查找复杂度:O(n),插入复杂度:O(1);

可能出现的题型:

1、K-sum

描述:给定一个数组和一个target,让求出数组中几个值的和等于这个给定的target。

解法:1)建立哈希表,循环遍历一次;2)定位两个指针根据和的大小来移动另外一个。这里设定的指针个数根据题目中K的个数来定。3Sum中可以设定3个指针,固定两个,移动另一个。

2、区间问题

描述:题目给出一个包含多个子数组的数组,然后根据区间是否重合来判断true or false。

解法:按照start的大小排序,在前一个区间的end和后一个区间的start找交集,如果后一个区间的start大于前一个区间end就重合,否则就不重合。

3、子数组类题目

描述:这类题目通常会在一个数组中求和/积,最大、最小等子数组。形式有很多种。比如209题,给定我们一个数字和数组,让我们求子数组之和大于等于给定值的最小长度。

解法:比如在209题中,求和为7时的最小子数组。从头开始,一个一个的相加,加一个和target比较一次,如果小于target,就继续往下加,如果大于target,就把现在这个子数组的头部右移,然后继续比较,如果小于target,就再加后边的值,继续比较。如果碰到满足条件的值就记下,继续执行程序,如果再一次碰到,就比较两个子数组的大小,直到数组结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值