代码随想录训练营第二天 | LeetCode 977.有序数组的平方、LeetCode 209.长度最小的子数组、LeetCode 59.螺旋矩阵II(还有昨天34忘记发啦(●‘◡‘●)

首先就是暴力解法,直接对所有元素进行平方,最后排序即可。(代码如下)

其次是双指针法,利用双指针分别从数组左右出发,来得到最终结果。需要注意的是,在利用双指针时for循环的条件,i++以及j--的位置是在if条件语句中的,是因为i++/j--是在经过判断数组最左端和最右端的元素哪个更大的条件下成立的,因此不被定义在for循环条件内部。(代码如下) 

暴力解法:时间复杂度O(nlog n);

双指针法:时间复杂度O(n)。

其实这道题目也是比较基础的,但是还是需要认真分析题目所包含的信息。如果存在不理解的也可以进一步搭配视频食用,但是只要用心对待就还是容易哒(✿◕‿◕✿)

同样是两种解法。暴力解法是通过两个for循环,不断寻找符合题给条件的子序列,从而得到最终结果。

滑动窗口(其实也是双指针法)通过一个for循环去实现,不断地调整子序列的初始位置和终止位置得到最终结果。因为只使用一个for循环,因此是用for循环来表示终止位置,而窗口的大小就是长度大于等于target值的子序列,故而此时的难点就是起始位置如何去移动。因此我们使用while语句去实现起始位置的移动(为什么不用if,因为如果用if只判断一次就结束了,而此时我们需要动态的去更新这个窗口的值,即需要它去不断靠近target值)。具体代码如下:

暴力解法:时间复杂度O(n^2);滑动窗口:时间复杂度O(n)。

要坚持循环不变量原则,同时通过对顺时针画矩阵的过程:即上行从左到右,右列从上到下,下行从右到左,左列从下到上。由外向内一圈一圈这么画下去。因此区间必须要遵循一个左闭有开的原则。代码实现如下:

其实这道题本身的思想并不复杂,只是代码看起来有点冗长,所以需要耐心对待(ಥ _ ಥ)

其实根据题目:target共有三种情况:target 在数组范围的右边或者左边;target 在数组范围中,且数组中不存在target;target 在数组范围中,且数组中存在target。所以这道题就可以使用二分法去寻找右边界或者是左边界来实现。(寻找右边界代码如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值