代码随想录算法刷题记录day2

本文讨论了在IT技术中,如何使用暴力排序和双指针优化算法解决两个问题:有序数组的平方操作(O(n)时间复杂度)和找到长度最小的满足特定和的子数组(类似于滑动窗口)。双指针方法利用了题目隐藏的特征,简化了暴力算法。
 977.有序数组的平方 

两种解法:暴力排序、双指针

暴力:将每个元素平方后,再将数组进行排序;

双指针:一个指向数组开头,一个指向数组结尾,判断哪个平方后大再存入新数组尾部,从后往前存。

此时的时间复杂度为O(n),相对于暴力排序的解法O(n + nlog n)是提升不少的。

 209.长度最小的子数组

两种解法:暴力排序、双指针

暴力:两层for循环,第二层循环判断总和是否 >= 目标值如果符合,判断元素个数是否小于result(初始值为INT32_MAX),小于则赋值。

双指针:外面 for循环 总和+=nums[终点指针位置],里面 while 循环终点指针指向满足总和 >= 目标值的位置时,起点指针指向起点的位置,满足目标值后记录长度,判断如果小于result(初始值为INT32_MAX)则赋值,然后起点指针+1,总和值➖nums[起点指针位置]。

效果类似滑动窗口,原理是在移动终止位置的时候,初始位置是不可逆的,初始位置只可能往后移动,而不用每次都从第零个元素开始
所有双指针法,都是充分利用题目的一个隐藏的特征,来对暴力算法的一种简化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值