问题:
思路:
知识点:双指针
想法:从数据两端往中间计算,直到汇合,总体不难,就不多说了。
-7 | -3 | 2 | 3 | 11 | |||
left | right |
代码实现:
class Solution {
public int[] sortedSquares(int[] nums) {
int[] squares = new int[nums.length];
//如果第一个数是负数,最后一个是正数
if(nums[0]<0&& nums[nums.length-1]>0){
int left = 0;
int right = nums.length-1;
int i = nums.length-1;//记录已经存入的位置
while(i>=0){
if(Math.abs(nums[left])>Math.abs(nums[right])){
squares[i] = nums[left]*nums[left];
i--;
left++;
}else if(Math.abs(nums[left])<Math.abs(nums[right])){
squares[i] = nums[right]*nums[right];
i--;
right--;
}else if(nums[left]==nums[right] && left==right){
squares[i] = nums[right]*nums[right];
i--;
break;
}else if(Math.abs(nums[left])==Math.abs(nums[right]) && left!=right){
squares[i] = nums[right]*nums[right];
i=i-1;
right--;
squares[i] = nums[left]*nums[left];
i--;
left++;
}
}
}
//全是非负数
else if(nums[0]>=0&& nums[nums.length-1]>=0){
for(int i = 0 ; i<=nums.length-1;i++){
squares[i] =nums[i]*nums[i];
}
}
//全是非正数
else if(nums[0]<=0&& nums[nums.length-1]<=0){
for(int i = nums.length-1 ; i>=0;i--){
squares[nums.length-1-i] = nums[i]*nums[i];
}
}
return squares;
}
}