有序数组的平方

版权声明:转载请随意! 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. 1 <= A.length <= 10000
  2. -10000 <= A[i] <= 10000
  3. 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));
	}

}

运行结果:

猜你喜欢

转载自blog.csdn.net/qq_41723615/article/details/88993413
今日推荐