数组总结
二维数组在空间上连续吗?
以java举例,int[][] string = new int[3][4]
,可以看出java中二维数组不是3*4个连续的地址空间,而是4条连续的地址空间组成
二分法
经典的数组操作,需要注意区间的定义,区间[a,b]
/[a,b)
,这决定了while(left<=right)
/(left<right)
这两种情况,并且在循环里right=mid-1
/right=mid
的写法也不同
双指针(快慢指针)
通过两个指针用一个for循环完成两个for循环的工作,时间复杂度为O(n),在数组和链表中常用
滑动窗口
滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。从而将O(n^2)的暴力解法降为O(n)
模拟行为(螺旋矩阵)
坚持循环不变量原则,在循环中判定边界条件