1. 对应力扣题目连接
有序数组的平方
2. 实现案例代码
public class SquareOfOrderedArrays {public static void main(String[] args) {// 创建非递减数组int[] nums = {-4, -1, 0, 3, 10};// 调用函数并打印结果System.out.println(Arrays.toString(sortedSquaresOfFor(nums)));System.out.println(Arrays.toString(sortedSquaresOfWhile(nums)));}/*** 编写一个函数,接收一个非递减数组作为输入,并返回每个数字的平方组成的数组。* 要求返回的数组也按非递减顺序排序。** @param nums* @return*/private static int[] sortedSquaresOfFor(int[] nums) {// 创建一个新数组int[] returnArr = new int[nums.length];int index = returnArr.length - 1;for (int i = 0, j = nums.length - 1; i <= j;) {if (nums[i] * nums[i] > nums[j] * nums[j]) {returnArr[index--] = nums[i] * nums[i];i++;} else {returnArr[index--] = nums[j] * nums[j];j--;}}return returnArr;}/*** 编写一个函数,接收一个非递减数组作为输入,并返回每个数字的平方组成的数组。* 要求返回的数组也按非递减顺序排序。** @param nums* @return*/public static int[] sortedSquaresOfWhile(int[] nums) {int n = nums.length;int[] result = new int[n];int left = 0, right = n - 1;int index = n - 1;while (left <= right) {int leftSquare = nums[left] * nums[left];int rightSquare = nums[right] * nums[right];if (leftSquare > rightSquare) {result[index--] = leftSquare;left++;} else {result[index--] = rightSquare;right--;}}return result;}
}