【刷题DAY02】977, 209, 59

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 今日学习的文章链接,或者视频链接

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)]
  • 技巧

    • 双指针

      • 查找符合条件的窗口
      • 从两端向中间归并
    • 区间不变量

      • 螺旋矩阵