给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 :
输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100]
package pro1;
//因为数组是有序的,所以最大值只可能在数组的两端,所以使用双指针来实现数组平方的排序,两端各一个指针,向中间移动
public class MyCode {
public static int[] sortedSquares(int[] nums) {
int [] result = new int[nums.length]; //创建一个新数组result
int k = result.length - 1; //k为新数组result的下标,从数组的最后一个元素的下标开始更新数组
for(int i = 0,j = nums.length - 1;i <= j; ) { //定义双指针i,j,i指向原来数组的第一个元素下标,j指向最后一个元素的下标
if(nums[i]*nums[i] < nums[j]*nums[j]) {
result[k--] = nums[j]*nums[j]; //因为k是从大到小更新的,但题目要求数组元素从小到大,所以新数组的下标从nums.length一直减减到0
j--;
}
else {
result[k--] = nums[i]*nums[i];
i++;
}
}
return result;
}
public static void main(String[] args) {
int[] nums = {-5,2,3,7};
int[] newarray = sortedSquares(nums);
for(int i:newarray) { //输出数组的方法
System.out.print(i + " ");
}
}
}