给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100]
示例 2:
输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]
思路:
本题可以采用双向指针的思路来做。因为数组中有负数,平方后可能为最大值,可以创建两个指针,分别指向原数组一左一右,再创建一个新数组来接受数据。内部逻辑为,如果左值平方大于右值平方,将该值赋给新数组末位,同时移动left指针,另一边同理。
代码:
class Solution {
public int[] sortedSquares(int[] nums) {
int[] result = new int[nums.length];
int left = 0;
int right = nums.length - 1;
int index = nums.length - 1;
while(left <= right){
if(nums[left]*nums[left] > nums[right]*nums[right]){
result[index--] = nums[left]*nums[left];
left ++;
}else{
result[index--] = nums[right]*nums[right];
right --;
}
}
return result;
}
}