给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
我们可以定义两个指针,R指针指向大于等于0的第一个位置,L指针=R-1
L指针向左移动,R指针向右开始移动,
比较两个指针元素平方的大小,小的加入到新的数组中去,
就和归并排序是差不多的。
public static int[] sortedSquares(int[] nums) {
int i;
for(i=0;i<nums.length;i++) {//找到大于等于0的第一个数
if(nums[i]>=0) {
break;
}
}
int[] help = new int[nums.length];//开辟辅助数组
int L = i-1;
int R = i;
i=0;
while(L>=0&&R<nums.length) {//L指针向左移动,R指针向右移动,小的那个加入到help数组中去
help[i++] = squares(nums[L])>squares(nums[R])?squares(nums[R++]):squares(nums[L--]);
}
while(L>=0) {
help[i++] = squares(nums[L--]);
}
while(R<nums.length) {
help[i++] = squares(nums[R++]);
}
for(i=0;i<nums.length;i++) {
nums[i] = help[i];
}
return nums;
}
public static int squares(int L) {
return (int) Math.pow(L, 2);
}
public static void main(String[] args) {
int[] arr= {-5,-3,0,3,5};
sortedSquares(arr);
for(int i:arr) {
System.out.println(i);
}
}