一. 题目描述
题目链接:有序数组的平方
二. 思考步骤
- 最先想到的暴力排序:将数组中每个元素平方后,直接使用sort函数(类似于快排的方法)排序。时间复杂度为O(n + nlogn),是一个循环数组计算的时间,加上一个将数组排序的时间。
代码示例:

- 双指针大法:
一开始没想到,参考了一下题解才反应过来。首先我们需要定义一个新的数组,和两个指针,分别为前后指针。
由于题目给出的是一个升序的数组,每个元素值平方后整个数组的元素最大值必在两端。所以我们只要不停的比较两个端点,大的元素值拿出来赋值给新数组(当然是从大到小哦),然后相应的端点被提取元素后,就需要往前(或后)移动一位,对下一个元素进行比较。这样就可以将元素的最大值,次大值一个一个提取出来,然后赋值给新数组,最后直接输出即可。
时间复杂度:
只存在一层循环,其时间复杂度为O(n),但是牺牲了O(n)的空间复杂度,典型的用空间换时间。
代码示例:

有序数组平方题的C++解法

博客围绕有序数组的平方题目展开,介绍了两种C++解法。一是暴力排序,将数组元素平方后用sort函数排序,时间复杂度为O(n + nlogn);二是双指针法,定义新数组和前后指针,比较两端元素,大的赋值给新数组,时间复杂度为O(n),用空间换时间。
883

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



