版权声明:转载请随意! https://blog.csdn.net/qq_41723615/article/details/88993413
题目描述:
给定一个按非递减顺序排序的整数数组 A
,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1: 示例 2:
输入:[-4,-1,0,3,10] 输入:[-7,-3,2,3,11]
输出:[0,1,9,16,100] 输出:[4,9,9,49,121]
提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A
已按非递减顺序排序。
package test;
import java.util.Arrays;
public class Solution {
//递增有序数组
public int[] sortedSquares(int[] A) {
//定义数组A[]的长度为length
int length = A.length;
//定义数组result[]数组,并初始化长度为length
int result[] = new int[length];
//数组元素都是正数
if (A[0] >= 0) { //第一个元素大于等于0,则此数组元素都是正数
for (int i = 0; i < length; i++) { //遍历数组元素
//为数组result[]中的每个元素进行平方运算并转为int型
result[i] = (int) Math.pow(A[i], 2);
}
//返回数组result
return result;
}
//数组元素都是负数
if (A[length - 1] <= 0) { //最后一个元素小于等于0,则此数组元素都是负数
//定义最后元素的索引
int index = length - 1;
for (int i = 0; i < length; i++) { //遍历数组元素
//为数组result[]中的每个元素进行平方运算并转为int型
result[index --] = (int) Math.pow(A[i], 2);
}
return result;
}
//指针缓存
int left = 0 , right = length - 1;
//定义数组最后一个元素的索引位置
int resultIndex = length - 1;
//定义数组两边left、right的平方
int leftSquare = (int)Math.pow(A[left], 2);
int rightSquare = (int)Math.pow(A[right], 2);
//定义好常量,避免每次判断都要赋值
boolean fromLeft = false;
//如果数组最后一个元素的索引大于等于0
while(resultIndex >= 0) {
//左边的数的平方大于右边
if (leftSquare >= rightSquare) {
//把数组的最后一个元素赋值为leftSquare
result[resultIndex] = leftSquare;
//left ++:指针向右移
left ++;
fromLeft = true;
} else {
//左边的数的平方小于右边,则把数组的最后一个元素赋值为rightSquare
result[resultIndex] = rightSquare;
//right --:指针向左移
right --;
fromLeft = false;
}
//数组最后一个元素的指针向左移动,每次判断都能确定一个最大的平法数,所以--,进入下一步左右两边的判断
resultIndex --;
//如果左索引大于右索引,则结束中断
if (left > length -1) {
break;
}
if (fromLeft) {
//如果上面判断为true
leftSquare = (int)Math.pow(A[left], 2);
} else {
//如果上面判断为false
rightSquare = (int)Math.pow(A[right], 2);
}
}
return result;
}
public static void main(String[] args) {
Solution solution1 = new Solution();
int A[] = new int[6];
A[0] = -22;
A[1] = -10;
A[2] = -5;
A[3] = 1;
A[4] = 9;
A[5] = 11;
int result1[] = solution1.sortedSquares(A);
System.out.println(Arrays.toString(result1));
}
}
运行结果: