算法训练DAY02

算法训练DAY02|977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

977.有序数组的平方

大体思路:

  • 绝对值最大的数平方就大,最大的平方数一定在两侧
  • 设置左右指针,每次将最大的平方数插入新数组
  • 使用左右指针遍历完整个数组

实现细节:

  • 平方运算写法**2
  • nums.insert(index,value)
  • nums.sort(reverse=True)

209. 长度最小的子数组

大体思路:

  • 直接两次for循环找到起点和终点,通过不了
  • 先计算数组和,和如果小于target,直接return 0,否则每次从左右两边丢掉较小的数,知道小于target。两边数值相同的话判断比较麻烦,思路行不通
  • 固定窗口长度大小,从大到小控制滑动窗口大小,这思路也不行,复杂度和暴力是一样的其实
  • 循环数组,循环表示的是数组的终点,如果大于target,更新min_le,减小窗口大小

实现细节:

  • python中定义无穷大的数字:min_lenth = float("inf")
  • return min_len if min_len!=float("inf") else 0 条件return写法

59. 螺旋矩阵 II

大体思路:

  • 矩阵写入顺序右下左上循环
  • 用count记录现在写入到的数字,当count==n**2时,结束
  • 用map(0,0,0)记录现在写入数字的坐标以及现在写入的方向

实现细节:

  • 数组生成写法out = [[0]*n for i in range(n)]
  • 二维数组定位out[0][0]

总结

总用时1.5h,之前的滑动窗口理解有问题,关键是遍历的是窗口的结束位置。螺旋矩阵有点久,代码基本功还差点,有思路但是现实有各种问题

posted @ 2023-05-10 09:56  秋山深一  阅读(48)  评论(0)    收藏  举报