算法训练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,之前的滑动窗口理解有问题,关键是遍历的是窗口的结束位置。螺旋矩阵有点久,代码基本功还差点,有思路但是现实有各种问题

浙公网安备 33010602011771号