给你一个按 非递减顺序 排序的整数数组 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);
}
}
这篇博客介绍了一种使用双指针方法来实现将一个非递减排序的整数数组转换为其平方数组,同时保持非递减顺序的方法。通过定义L和R指针,分别从数组的负数部分和正数部分开始,比较并选择较小的平方值加入到结果数组中,确保排序的正确性。该算法类似于归并排序的过程。
466

被折叠的 条评论
为什么被折叠?



