一、题目内容 简单
给你一个按 非递减顺序 排序的整数数组 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]
提示:
- 1 <= nums.length <= 104
- -104 <= nums[i] <= 104
- nums 已按 非递减顺序 排序
二、解题思路
1. 暴力解法
逐个计算,然后排序2. 双指针
由于数组是排序过的,以非递减的形式。
那么从最左边 和 最右边两个开始比对,慢慢往中间移动三、具体代码
/**
* @param {number[]} nums
* @return {number[]}
*/
var sortedSquares = function (nums) {
// nums 是非递减的,题目的意思其实是递增的意思
const result = []
for (let left = 0, right = nums.length - 1; left <= right;) {
const leftSquare = nums[left] * nums[left]
const rightSquare = nums[right] * nums[right]
if (leftSquare > rightSquare) {
result.unshift(leftSquare)
left++
} else {
result.unshift(rightSquare)
right--
}
}
return result
};
四、其他解法