使用双指针!
解题思路:由于是存在正负.因此中间的值一定小于两端中的一端.
将双指针指向数组两端,然后平方进行比较,将较大的值放入新数组的尾部,然后该指针向中间一位.直到左右两个指针碰撞完while(x≤y).
s3.us-west-2.amazonaws.com/secure.noti…
public int[] sortedSquares(int[] nums) {
// 双指针的起始位置为数组的左右两端(由于有正负,因此数组中间的值一定小于两端的值)
int x = 0;
int y = nums.length-1;
int[] newNum = new int[nums.length];
int i = nums.length -1;
// 当左指针大于右指针(碰撞后继续执行),循环结束
while (x <= y) {
// 对左右两端的数进行平方比较,大的一个放入新的数组中,并且指针往中间移一位.
int xs = nums[x] * nums[x];
int ys = nums[y] * nums[y];
if (ys > xs) {
//右边的值比较大,将右边的值放入新数组,并且指针向前移
newNum[i] = ys;
y --;
} else {
newNum[i] = xs;
x ++;
}
i --;
}
return newNum;
}