977.有序数组的平方
暴力解法
- STL:sort函数
- 容器的排序
vector vec;
sort(vec.begin(), vec.end()); - 数组排序
int nums[10] = {1,2,3,4};
sort(nums, nums+3) 排前两个数 - 时间复杂度
快速排序,时间复杂度为O(nlogn)
- 容器的排序
双指针法
- 定义变量
i:指向老数组起始位置
j:指向老数组终止位置
k:指向新数组的终止位置
result:定义一个新数组,用来保存结果 - 循环逻辑
数组是有序的,所以最大值肯定是在数组的两端产生。
写一个循环,循环条件……
第一次循环,比较两端i,j数据平方大小,然后指针移位
第二次循环,同第一次循环
得出循环条件是当i>=j时循环终止 - 写法精进
可以将两句话:result[k] = ***,k–;
合并成一句话:result[k–] = **
暴力解法
双层for循环,一层循环控制子序列起始位置,一层循环控制终止位置,然后用一个值len来记录每次的符合条件的长度
第一次循环,比较nums[i]和target大小,如果大于,则
内层循环:i不变计算i到j区间的总值大小,然后和target比较,如果小于,则j往后移动一位。如果大于记录下此时的长度
滑动窗口
滑动窗口是双指针的一种
滑动窗口和暴力解法最重要的区别就是:如何移动起始位置i