题目描述:
给你一个按 非递减顺序 排序的整数数组 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;
}
}