1. 理论基础
1.1 数组的toString方法是给出哈希值;
1.2 String.substring(a, b)截取String中a到b的部分;
1.3 数组在内存空间的地址是连续的,增删元素时,需要移动后面元素的地址;
1.4 数组的元素不能直接删除,可以覆盖;
1.5 m*n多维数组在内存中不是m*n的连续地址空间。
2. 经典思路
2.1 二分法
一般在有序数组查找中,常用二分法;
普通循环时间复杂度为O(n),二分法的时间复杂度为O(logn);
循环不变量原则:在循环中坚持对区间的定义。
2.2 双指针法
快慢指针法:通过一个快指针和慢指针在一个for循环下完成两个for循环的工作;
双for循环时间复杂度为O(n^2),快慢指针法时间复杂度为O(n);
左右指针法:通过一个左指针和右指针分别从首尾出发完成对数组的操作;
一般在数组改动中,使用双指针法。
2.3 滑动窗口法
根据当前窗口的情况,不断调节窗口的起始位置和结束位置,得到想要的一段结果;
一般用于查找长度最小的连续子串;
查找时,先右移右指针,直到找到符合条件的窗口,再右移左指针,直到找到恰好不符合条件的窗口,此时左右指针之间的窗口即为可能的子串,再与目前得到的最短子串比较,重复上述步骤更新长度最小的连续子串,直到指针遍历完数组。
2.4 模拟行为
例如顺时针输出矩阵,一般不涉及算法;
主要考察对代码的掌控能力,要注意到循环不变量原则,对于边界的判断要有严谨原则。