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

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

链接: 977.有序数组的平方
链接: 209.长度最小的子数组
链接: 59.螺旋矩阵II

自己看到题目的第一想法

977.有序数组的平方:首先遍历平方得到平方后的数组,再使用冒泡排序法。但执行用时比较落后。
209.长度最小的子数组:最小长度的子数组里包含的数肯定都相对来说大一些,所以先排序,然后再从大到小取数相加,如果满足大于等于target直接返回此时取到的整数长度,如果遍历一遍之后依然没有满足条件就直接返回-1。
59.螺旋矩阵II:输出是一个二维数组,本质上是确认matrix[i][j]与n的关系,但由于螺旋,且输出是按照行列,并不清楚怎样将这两种规律去合并。遂看解答。

看完代码随想录之后的想法

977.有序数组的平方:由于原本数组就是非降序排列的,只是由于负数的存在所以平方后可能会需要调整顺序,所以用两个指针分别从头和尾部开始移动,比较大小之后在相应位置填写,需要声明一个新的同样大小的数组。
209.长度最小的子数组:发现自己的思路是有问题的,因为题目说的是连续子序列,而我想的排序会打乱数组的顺序,不符合题意。看了题解之后大概明白是使用双指针法实现滑动窗口,一个指针用于扩大窗口,一个指针用于收缩窗口,当指针之间的数相加大于等于target则开始收缩窗口,直到小于target之后再扩大窗口。
59.螺旋矩阵II:上右下左边界依次去赋值,每个边界赋值之后用–来表示缩减,妙。

自己实现过程中遇到哪些困难

977.有序数组的平方:声明一个相同长度的新数组不会

int[] result = new int[nums.length];

209.长度最小的子数组:对于如果没有满足条件的子序列情况,官方题解给出了一个ans=Integer.MAX_VALUE的写法,如果进入了循环,也就是有这样的情况ans会被赋值为right-left+1,也就是子序列的长度,最后返回值return是 ans==Iteger.MAX_VALUE?0:ans;这个想法是很妙的。
59.螺旋矩阵II:在下边界和左边界赋值的时候需要逆序,也就是从大到小并且–,这个地方没有注意到,需要注意。

今日收获,记录一下自己的学习时长

1.对于双指针有了新的认识,比如今天的有序数组的平方和长度最小的子数组都有用到
有序数组的平方法和用了双指针分别比较两端大小填入新数组,填入的数的指针进行移动。
长度最小的子数组用了双指针实现滑动窗口,由于子数组题目要求是连续的,前面的指针用于测量是否相加大于等于target,后面的指针用于缩小滑动窗口。
2.对于螺旋这道题还是蛮新,用边界来计算,这个方法也挺有意思,同时需要注意下边界和左边界的循环是逆序的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值