977.有序数组的平方
题目:有序数组的平方
讲解视频:https://www.bilibili.com/video/BV1QB4y1D7ep
讲解文章:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html
尝试
- 暴力求解 按排序做
- 双指针 一开始想的是单方向指针,没有解出来
讲解
-
问题特点:带负数的非递减序列平方后,由两端向中间递减。
-
解法:双向指针,新数组从尾向头插入
实现
- 循环终止条件:
left > right
- 边界情况:
left==right
时,左右指针对应值也相等,但向新数组只插入一次;left!=right && leftval==rightval
需插入两次。
209.长度最小的子数组
题目:https://leetcode.cn/problems/minimum-size-subarray-sum/
暴力求解
外层循环确定起始下标,内层循环确定终止下标。
两次遍历穷举所有可能的子数组。
双指针实现滑动窗口
思路
遍历终止位置,达到要求的子数组再进行缩短找最小长度。
减少了搜索的空间。
实现
- 我的尝试
- 结束位置从0开始循环,
- 每次遇到
sum>=target
的子数组,开始位置从0向后减少。
59.螺旋数组
题目:https://leetcode.cn/problems/spiral-matrix-ii/
题解
分别为4条边提供一个变量标识,顺序按照螺旋方式对四条边进行操作。
讲解
收获
- 有序数组的平方:注意数据的特征,依此决定解法设计
- 子数组:滑动窗口的代表变量要理清
- 螺旋数组:
- 边界条件复杂时,要保持循环不变量
- 通过边界确定循环中控制变量的设计