有序数组的平方
给你一个按 非递减顺序 排序的整数数组 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]
实现
暴力解法
最简单的方案是先平方再排序。
function sortedSquares(nums: number[]): number[] {
return nums.map(i => i * i).sort((a, b) => a - b);
};
双指针
一个包含负数的升序数组,那么他的平方最大值一定在两端,所以可以设置两个指针,分别指向开头和结尾,每次比较,将较大的数放入结果集中即可。
function sortedSquares(nums: number[]): number[] {
const result = []
const size = nums.length
let k = size - 1
for(let i = 0, j = size - 1; i <= j;) {
if(nums[i] * nums[i] < nums[j] * nums[j]) {
result[k--] = nums[j] * nums[j]
j--
} else {
result[k--] = nums[i] * nums[i]
i++
}
}
return result
};