数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力

也就是说,想法很简单,但实现起来 可能就不是那么回事了

先给大家简单的介绍一下数组

数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下表索引的方式获取到下表下对应的数据。举一个字符数组的例子,如图所示:




python二维数组删除某个元素 二维数组删除指定元素_数组


需要两点注意的是

  • 数组下表都是从0开始的。
  • 数组内存空间的地址是连续的

正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址

例如删除下表为3的元素,需要对下表为3的元素后面的所有元素都要做移动操作,如图所示:


python二维数组删除某个元素 二维数组删除指定元素_数组_02


那么二维数组直接上图,大家应该就知道怎么回事了


python二维数组删除某个元素 二维数组删除指定元素_内存空间_03


那么这里要请同学思考一下,二维数组在内存的空间地址是连续的么?

我们来举一个例子,例如: int[][] rating = new int[3][4]; , 这个二维数据在内存空间可不是一个 3*4 的连续地址空间

看了下图,就应该明白了:


python二维数组删除某个元素 二维数组删除指定元素_二维数组删除_04


这个二维数组在内存中不是 3*4 的连续地址空间,而是四条连续的地址空间组成!

这我从leetcode上选出五道数组相关的常见面试题

  • 第一道:leetcode 编号35,搜索插入位置,考察数据的基本操作,思路很简单,但是在通过率在简单题里并不高,不要轻敌。 暴力解法过了之后,再尝试一下使用二分法来解决这道题
  • 第二道:leetcode 编号27,移除元素, 这道题目也是考察数据基本操作,想法简单,但是操作起来并不简单
  • 第三道:leetcode 编号26,删除排序数组中的重复项 做完了 编号27的题目之后,在做26,可以增减对数组操作的理解
  • 第四题:leetcode 编号209,长度最小的子数组, 这道题目暴力是也可以的,时间复杂度为O(n^2), 使用滑动窗口的办法来解决这道题目,不妨试试,时间复杂度为O(n)
  • 第五题:leetcode 编号59,螺旋矩阵, 这道题真是是面试中的常客,特别是笔试的时候,而且这道题很多同学做过一遍,再去过,还是做不好。建议在循环遍历的时候需要定义好自己的循环不变量

希望通过这篇文章,可以帮助大家更深的理解数组。

后面我会介绍一下 数组相关的常见面试题型。

笔者介绍:
ACM亚洲区域赛铜牌获得者,哈工大计算机硕士毕业,先后在腾讯和百度采坑,欢迎关注「代码随想录」!这里有更多算法干货等着你呢