977. 有序数组的平方
题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
非递减数组
0x1 看到题目的第一想法
- 暴力 先全部平方,再排序
- 要求时间复杂度O(n),二分找到中间临界的负数和非负数,然后左右扩散
0x2 自己实现过程中遇到哪些困难
- Python常见指定大小的List
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- 我写复杂了,这个题是有规律的,数组平方的最大值,要么在左指针要么在右指针,使用双指针从最左和最右向中间进行扫描。
0x5 今日收获,记录一下自己的学习时长
- 有序数据的技巧
- 使用双指针向中间归并
- 1h
209. 长度最小的子数组
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum
找到数组中符合要求的最小连续子串
0x1 看到题目的第一想法
- 暴力 两个for循环
0x2 自己实现过程中遇到哪些困难
- 想不出来O(n)的解法
0x3 今日学习的文章链接,或者视频链接
- https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html
- https://www.bilibili.com/video/BV1tZ4y1q7XE
0x4 看完代码随想录之后的想法
- 使用双指针进行滑动
- 精髓在于从二维循环降到一维循环时,一维循环里控制的变量是目标子串的结束索引。
- 实现窗口滑动的三个点:
- 窗口内的内容是? -> 加起来大于等于target的连续元素
- 怎么控制窗口的起始位置? ->通过Sum>=s,起始位置向前滑动
- 怎么控制窗口的终止位置? -> 通过for循环控制终止位置往后移动
0x5 今日收获,记录一下自己的学习时长
- 有序数据的技巧
- 使用双指针对数组选择符合条件的窗口
- 1h
59. 螺旋矩阵 II组
题目链接:https://leetcode.cn/problems/spiral-matrix-ii
元素按顺时针顺序螺旋排列的 n x n 正方形矩阵
0x1 看到题目的第一想法
- 没想法
0x2 自己实现过程中遇到哪些困难
- 四个小for循环range后面到底填什么卡了很久,不是这里错就是那里错
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- 遵循循环不变量原则
- 在整个过程中,以圈数作为大循环,在每一圈里,进行从左到右,从上到下,从右到左,从下到上的顺序进行遍历。四个部分在循环是均需保持左闭右开这个不变量。
- 每结束一圈,起始位置的横纵坐标都要+1,且偏移量+1,for的range范围可以举例子来测试到底填什么
0x5 今日收获,记录一下自己的学习时长
- 确定区间不变量
- 不变量在循环期间保持不变
- 2h
待重点复习
977, 209, 59
总结
- 数据结构基础
- 数组
- python创建某个大小的List的写法
- 一维:result = [0] * n
- n x n 二维:result = [[0] * n for _ in range(n)]
- python创建某个大小的List的写法
- 数组
技巧
双指针
- 查找符合条件的窗口
- 从两端向中间归并
区间不变量
- 螺旋矩阵