977.有序数组的平方
两种解法:暴力排序、双指针
暴力:将每个元素平方后,再将数组进行排序;
双指针:一个指向数组开头,一个指向数组结尾,判断哪个平方后大再存入新数组尾部,从后往前存。
此时的时间复杂度为O(n),相对于暴力排序的解法O(n + nlog n)是提升不少的。
209.长度最小的子数组
两种解法:暴力排序、双指针
暴力:两层for循环,第二层循环判断总和是否 >= 目标值如果符合,判断元素个数是否小于result(初始值为INT32_MAX),小于则赋值。
双指针:外面 for循环 总和+=nums[终点指针位置],里面 while 循环终点指针指向满足总和 >= 目标值的位置时,起点指针指向起点的位置,满足目标值后记录长度,判断如果小于result(初始值为INT32_MAX)则赋值,然后起点指针+1,总和值➖nums[起点指针位置]。
效果类似滑动窗口,原理是在移动终止位置的时候,初始位置是不可逆的,初始位置只可能往后移动,而不用每次都从第零个元素开始
所有双指针法,都是充分利用题目的一个隐藏的特征,来对暴力算法的一种简化。
本文讨论了在IT技术中,如何使用暴力排序和双指针优化算法解决两个问题:有序数组的平方操作(O(n)时间复杂度)和找到长度最小的满足特定和的子数组(类似于滑动窗口)。双指针方法利用了题目隐藏的特征,简化了暴力算法。
310

被折叠的 条评论
为什么被折叠?



