有序数组的平方

有序数组的平方

此题目使用快慢指针法,一个指针指向数组开头,一个指针指向数组末尾。

因为是有序数组,最大值不是在左边,就是在右边,不会在中间。

使用快慢指针,可以得出

如果A[i] * A[i] < A[j] * A[j] 那么result[k--] = A[j] * A[j];

如果A[i] * A[i] >= A[j] * A[j] 那么result[k--] = A[i] * A[i];

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public int[] sortedSquares(int[] nums) {
if(nums.length == 1){
nums[0] = nums[0]*nums[0];
return nums;
}

int i=0;
int j = nums.length-1;
int k=nums.length-1;
int[] res = new int[nums.length];
while(k >= 0){
if(nums[i]*nums[i] < nums[j]*nums[j]){
res[k--] = nums[j]*nums[j];
j--;
}
if(nums[i]*nums[i] >= nums[j]*nums[j] ){
res[k--] = nums[i]*nums[i];
i++;
}
}

return res;

}
}