一周一总结
本周我们解析了5个算法题
二分查找
移除元素
有序数组平方
最小子数组
螺旋矩阵
一、二分查找
- 数组是有序的!
- while循环的结束条件为left<=right
- mid更新为 left + ((right - left)>>1)
- left 更新为 mid + 1;
- right 更新为 mid - 1;
二、移除元素
- 采用双指针法。
- left 指针始终指向 目标元素
- right 指针始终指向 非目标元素
- 最后返回结果为 left;
三、有序数组平方
- 采用双指针法:指针为一头一尾。
- left 为头指针
- right 为尾指针
- left 指向元素与right 指向元素的平方进行对比
- 结果数据以尾填充的方式加入到新数组中以保证有序。
四、长度最小的子数组
- 采用双指针法用来控制滑动窗口的长度(子数组的长度)
- 当sum(子数组之和) >= target(目标值)
- 采用while循环以保证子数组的长度是最小的。
- return result == nums.length + 1 ? 0:result;
五、螺旋矩阵
- 螺旋数组要分为奇数和偶数两种情况
- 奇数最后要对中心进行填充,偶数则直接形成螺旋数组
- 需要两个循环:外层循环次数 = n /2,内层循环形成螺旋状
- 其中start 变量是用来控制每次填充的位置! 可以说是循环的每一圈,最开始的位置坐标是start