给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
示例 2:
思路:不论数组中有正有负、全正还是全负,取平方后最大的数值必定在两端中。那么双指针指向首尾,倒序遍历result数组,并判断双指针数值大小,移动指针即可。
解答:
class Solution {
public int[] sortedSquares(int[] nums) {
int[] result = new int[nums.length];
int startIndex = 0, endIndex = nums.length - 1;
for (int i = nums.length - 1; i >= 0; i--) {
int startNum = Math.abs(nums[startIndex]);
int endNum = Math.abs(nums[endIndex]);
if (startNum < endNum) {
result[i] = endNum * endNum;
endIndex--;
} else {
result[i] = startNum * startNum;
startIndex++;
}
}
return result;
}
}