数组

本篇为个人笔记,内容或有错误。
图片部分源于代码随想录,侵删。

数组

需要两点注意的是:

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

正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址,而且数组不能增删,只能覆盖
在C++中二维数组在地址空间上是连续的。但是Java是没有指针的,同时也不对程序员暴露其元素的地址,寻址操作完全交给虚拟机。所以看不到每个元素的地址情况。

二分

使用二分的前提是:

  • 有序数组
  • 无重复元素

使用二分时一般需要注意边界条件的处理,一般包括以下两种情况:

  1. 左闭右闭
  2. 左闭右开

二分法经常写乱,主要是因为对区间的定义没有想清楚,区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则

双指针

使用双指针可以实现滑动窗口等操作,避免了循环嵌套,大大降低了时间复杂度

螺旋矩阵

要注意四个方向临界条件以及区间类型都要一致