算法训练营Day2

4.有序数组的平方

暴力排序

可以用sort:nums.sort() 或 sorted() ,注意区别。

  • 时间复杂度是 O(n + nlogn)

(代码图片传不上,算了)

双指针法 (前后指针)

注意到给的数组是按非递减顺序的已排序数组,数字有正有负,故平方后,两端较大,中间较小。

考虑双指针,比较前后两头的平方值。i指向起始位置,j指向终止位置。

定义一个新数组result,和原数组一样的大小,让k指向result数组终止位置。

注意:提前定义res列表!

时间复杂度为O(n)

5.长度最小的子数组

双指针法(滑动窗口)

此题巧妙处在于如何实现时间复杂度为O(n):通过每个元素只被遍历一次,即元素先通过右指针进一次,后通过左指针出一次。外层循环是右指针,指向子数组的终止位置,内层循环是左指针,指向起始位置。

209.长度最小的子数组

另外注意,min_len通过min()的更新,curr_sum的累加,尤其注意不存在时返回0

  • 暴力解法时间复杂度:O(n^2)

  • 滑动窗口时间复杂度:O(n)

暴力解法

通过2个for循环,力扣上超时了。时间复杂度是O(n^2)。

6.螺旋矩阵II

本题稍复杂,思路是:

  • 从外层逐层填充,每层起始点的行数列数后移1,偏移量+1;

  • 在每层中,4条边的边界条件注重循环不变量原则,即左闭右开,且保持不变;

  • 另外注意在遍历时,行数列数分别的固定与变化情况;注意n为奇数时需填充中心点。

时间复杂度 O(n^2): 模拟遍历二维矩阵的时间

空间复杂度 O(1)

耗时4h

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值