给你一个按 非递减顺序 排序的整数数组 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]
思路:不论数组中有正有负、全正还是全负,取平方后最大的数值必定在两端中。那么双指针指向首尾,倒序遍历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;}
}