代码随想录 小结01 数组

发布时间 2023-12-31 22:23:45作者: 又见鸣蜩

数组篇一共有五个题目

第一题二分查找
值得注意的是,要自己想好 区间的边界到底是写左闭右开 还是左闭右闭
根据边界不同 while的条件和左右指针的移动会有差别
目前我的习惯是写左闭右开 还是固定一下习惯比较好

第二题是实现数组类的erase()
使用快慢指针可以做到在数组原地进行指定元素的移除而不需要额外空间
慢指针指向的是新数组的下标 快指针指向的新数组的元素 遇到非新数组的元素则快指针跳过 慢指针不动

第三题是返回一个有序数组的元素平方后的数组

这题如果要实现O(n)级别的时间复杂度 需要两个指针分别在数组的左右两端
这里利用了这个有序数组的特性 因为这个数组有负数存在 且有序
那么最大值一定在数组两端存在 在两端设立指针来回进行比较就可以得到由大到小的有序数组

另外就是要注意一下c++ vector容器的初始化写法

第四题是返回长度最小的子数组

这题是利用双指针实现滑动窗口
具体而言 快指针先动 直到滑动窗口内的值大于target 然后尝试移动慢指针缩小窗口 看能否满足大于target值
来实现寻找最小的长度 这个最小长度和窗口内的值都需要int变量进行存储 最小长度设定为一个大值 遍历结束后如果没有改变
说明不存在满足target的子数组

第五题是螺旋矩阵

这题主要是考察边界的条件 边界条件可以画图进行小心的推理
注意的是圈数是n/2 startx = starty = offset-1
offset是偏移量 因为每走一圈 圈就会变小