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

977.有序数组的平方

C

  1. 自己的思路:找到最接近0的位置,然后向左右寻找,谁的平方小放前面,直到俩边都到达末尾。

观看官方题解后,更加清晰的描述是:寻找到正数和负数的分界线

int negative = -1;
for (int i = 0; i < numsSize; i++){
if (nums[i] > 0){
	negative = i;
	break;
}
}

或者直接全部平方,然后再排序。这是可预测的n+nlogn

  1. 看题解补充的思路,直接使用双指针,一个放在头,一个在尾,直接进行比较,比自己的第一个思路更优雅,时间复杂度是可O(n),返回了新的数组,空间复杂度是O(n)

实现成功

202 长度最小的子数组

C

  1. 自己的思路:使用俩个指针,俩个从头开始,快指针向后探索尝试寻找一个组合,计算经过的数字和,如果达到末尾,那么回到慢指针处,俩个一起向后移动一格。 如果有多个结果,使用一个变量储存,更小就存入,否则丢弃。最后检测这个变量,初始值可以设为-1;

这里的最坏结果就是每次都需要探索到最后,时间复杂度是O(nn),没有使用额外堆空间
第一次的代码没有考虑到数组最后有符合的,直接被丢弃了
之后又再次失败,被用例[ targer = 11; [1, 2, 3, 4, 5] ] * 原来是题目描述没看清,大于目标值也行

好,暴力法完成了,但是完美的超时。官方也超时,这种方法是不推荐的

  1. 看过滑动窗口的思路: 先将快指针移动到和大于或等于目标值的位置,此时得到第一个子数组。之后将慢指针向右移动开启下一次寻找。最后变量中会记录经历的最小数组

成功完成。这个过程理清了,编写的难度不高

  1. 官方的第三种解法:使用了一个额外的数组来存储前缀和,模模糊湖,先放一边

59 螺旋矩阵||

C

能想象填的顺序但是没法实现,直接看题解;
学会了动态的分配二维数组
手打一遍
看视频真的挺好的,能跟着思考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值