代码训练营-2day:有序数组的平方、长度最小的子数组、螺旋矩阵

一、有序数组的平方

一开始思路肯定是暴力解法,所有数字先平方,后排序,但是导致复杂度增加。数组的数据有负数和正数,因此平方后,最大值一定是在两端,可以考虑双指针,思路如下:

setp1:首先找到两端数,先平方,再比较,最大那个数,填入新的数组最后位置,如果是最右边指针指向的平方数大于左边的平方数,那么右指针减1,否则左指针加1;

step2:直到left <=right;

二、长度最小的子数组

最开始做的时候,也是用暴力解法,通过遍历找到所有的情况,这样等到最小值,但是计算复杂度高,学习代码随想录上面(链接:代码随想录),使用滑动窗口方法,学习过程中,针对该方法,最核心的点是怎么处理头窗口的移动,例如本题目,每一次累加和大于目标值,就需要更新头窗口,并把每一次最小的长度记录下来。

三、螺旋矩阵

这道题目需要考虑细节特别多,最主要还是区间封闭选择,是左闭右开,还是左开右闭,当每一次遍历矩阵时候,需要遵循此原则,才能不重复和不遗漏。做题目时候,需要考虑以下几点:

1 循环次数,即循环几圈;

2 偏移量,每一次循环后,边界都有偏移;

3 起始位置,需要考虑x y方向起始位置;

4 奇数和偶数矩阵不同,奇数最后是中间一个,需要单独考虑。

以下是code:

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值