基于代码随想录网站内容:代码随想录 (programmercarl.com)
目录
1.二分查找
2.移除元素
3.有序数组的平方
4.长度最小的子数组【必须复习】
5.螺旋矩阵||【最好复习】
总结:涉及区间时就要想到循环不变量问题
1.二分查找 (力扣704)
考点:查找算法之二分查找(+循环不变量)
使用信号:
①数组有序
②数组中无重复元素
方法:
①定义左右指针
②取中值
③比大小
④移动左右指针
2. 移除元素(力扣27)
考点:双指针法(快慢指针法)
使用信号:数组排序
方法:
①定义快慢指针
②用快指针寻找新数组的元素
③将新数组元素复制到慢指针指向的新数组下标的位置
3.有序数组的平方 (力扣977)
考点:排序算法之双指针法
使用信号:数组有序
方法:
①定义新数组
②定义头尾指针
③移动指针来构建新数组
相关知识:
①C#定义数组:
②C#数组长度的表示:
4.长度最小的子数组(力扣209)【必须复习!】
考点:滑动窗口(实际是双指针法)
使用信号:长度最小的连续子数组
方法:
①用一个for循环遍历滑动窗口的终止位置
②根据子序列的和的大小不断调节滑动窗口的起始位置
相关知识:
①
int.MaxValue
在C#中表示int的最大值
②
5.螺旋矩阵II(力扣59题)【最好按C#那个利用对称性做法再做一下】
考点:循环不变量原则
使用信号:涉及数组多次循环的边界条件判断时用
方法:
- 填充上行从左到右
- 填充右列从上到下
- 填充下行从右到左
- 填充左列从下到上
由外向内一圈一圈这么画下去。
技巧:利用对称性(详见代码随想录的C#算法)
相关知识:
①C#多维数组的两种定义形式:
1、矩形数组
2、锯齿数组(数组的数组)
参考文章: