JAVA双指针实现-有序数组的平方

109 阅读1分钟

题目描述:

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例:

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

解题思路:

这题的数组是有序的,因此可以使用双指针轻松解决,我们可以先定义一个返回数组,长度为数组的长度,同时定义两个变量left,right。比较谁平方后最大。如果下标left的平方大于right的平方,则将left的值移动到right-left的位置,而后left+1.反之亦然。 边界值处理:最后left==right,也就是说返回下标为0的数则结束。

代码实现:

class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] newArr = new int[nums.length];
        int left = 0,right = nums.length - 1;
        while(left <= right){
            if(nums[left]*nums[left] < nums[right]*nums[right]){
                newArr[right - left] = nums[right]*nums[right];
                right--;
            }else{
                newArr[right - left] = nums[left]*nums[left];
                left++;
            }
        }
        return newArr;
    }
}