数组
本篇为个人笔记,内容或有错误。
图片部分源于代码随想录,侵删。
数组
需要两点注意的是:
- 数组下标都是从0开始的
- 数组内存空间的地址是连续的
正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址,而且数组不能增删,只能覆盖。
在C++中二维数组在地址空间上是连续的。但是Java是没有指针的,同时也不对程序员暴露其元素的地址,寻址操作完全交给虚拟机。所以看不到每个元素的地址情况。
二分
使用二分的前提是:
- 有序数组
- 无重复元素
使用二分时一般需要注意边界条件的处理,一般包括以下两种情况:
- 左闭右闭
- 左闭右开
二分法经常写乱,主要是因为对区间的定义没有想清楚,区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。
双指针
使用双指针可以实现滑动窗口等操作,避免了循环嵌套,大大降低了时间复杂度
螺旋矩阵
要注意四个方向临界条件以及区间类型都要一致