题目:https://leetcode-cn.com/problems/squares-of-a-sorted-array/
代码:
class Solution {
public int[] sortedSquares(int[] A) {
int[] res = new int[A.length];
int l=0;
int r = A.length - 1;
int i = res.length - 1;
while (l <= r) {
int nl = A[l] * A[l];
int nr = A[r] * A[r];
if (nl > nr) {
res[i] = nl;
l++;
}else{
res[i] = nr;
r--;
}
i--;
}
return res;
}
}
直接按照题目要求,先对A数组的每个值计算平方值,最后按照从小到大排序即可获得答案,但是这样效率太低,由于题目给定的数组A是有序的,我们可以好好利用这个条件进行优化。
1、因为数组A包含负数,且从小到大排序
2、平方值的大小跟绝对值有关
3、依照绝对值排序的话,A数组的特点是,两边大,中间小。根据这个特性我们可以对A数组进行排序
4、排序的时候可以顺便计算平方值,这样可以省去调用Math.pow()方法的时间消耗
最终得出上述代码,耗时1ms,击败100%的用户,666!