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