代码随想录算法训练营第二天| 977. 有序数组平方、 209.长度最小的子数组, 59.螺旋矩阵II

977. 有序数组平方

第一个冲到脑袋里的想法就是把原数组直接相乘, 最后一个sort,完事儿!

但是事情肯定不会这么简单,如果有follow-up,把复杂度降低到O(N), 也就是说希望遍历一遍就能算出答案,数组的常用技巧就是双指针,于是乎我顺着常理去想,如何找到最小值呢? 答: 遍历一遍,记录最小值和Index. 之后在这里为界向两边扩展,一边相比一边移动指针知道结束。

写完之后,得意地去看答案发现更巧妙地思路就是可以从最大值开始赋值!这样就避免了先遍历一边去找最小值的麻烦。
很巧妙丫!

209.长度最小的子数组
这一类需要保存连续子数组的题目,一看就有种滑动窗口的既视感。
对于滑动窗口,我自己的理解是一共分3步:
1: 开始移动右指针扩窗口,更新自己需要计算的变量。
2:判定什么情况下需要缩窗口了,开始缩小,同时更新窗口内部的变量。
3:在窗口满足条件的时候,计算答案

对于如何debug, 我也是正在一步步探索最适合自己的debug 模板, 现在我采用了别人的建议,打出更改后的left, right 下标,看窗口是不是按照我自己的想法进行移动。如果是的,再去看自己的答案计算是不是公式错误,或者再错误的位置进行计算。

59.螺旋矩阵II
看了一些题解,对二维数组有了更多的理解。
这道题,并不需要一些特殊的技巧,只要按照题目要求的顺序一个个把num放入到自己建立好的空数组即可。
而在遍历过程中,要记住的是:我们只要到一个boundary(无论上下还是左右)就意味着有一行或者一列已经被填满了,这样我们需要一个var去记录才能在下次遍历的时候不会又遍历回去。

所以我创建了4个boundary 变量,每次遍历赋值之后,就一定会更新其中一个变量的值。
最后完成所有赋值输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值