给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
事例如下:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
问题解析:
有序数组,计算数组中每一个数字的平方,排序并返回
解决方案1:
循环计算数组中每一个数字的平方,然后重新结果排序
public static int[] sortedSquares(int[] nums) {
int[] arr = new int[nums.length];
//计算
for (int i = 0; i < arr.length; i++) {
arr[i] = nums[i] * nums[i];
}
//排序
Arrays.sort(arr);
//返回
return arr;
}
解决方案2:
双指针处理
从数组的左右两端开始计算平方,定义一个新的数组,将计算结果从大到小排列
public static int[] sortedSquaresTwo(int[] nums) {
//定义要返回的数组
int length = nums.length;
int[] arr = new int[length];
//循环,将乘积最大的值放到定义数组的最后,依次递减
for(int left = 0,right = length-1,pos = length-1;left<=right;){
if(nums[left] * nums[left] >nums[right] * nums[right]){
arr[pos] = nums[left] * nums[left];
left++;
}else{
arr[pos] = nums[right] * nums[right];
right--;
}
pos--;
}
return arr;
}