问题描述
给定一个按非递减顺序排序的整数数组 nums
,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
解法一
解题思路:
我们需要对数组中的每个数字进行平方,然后对结果数组进行排序。由于数组已经是非递减排序的,我们可以使用双指针的方法来优化排序过程。
我们可以设置两个指针,一个指向数组的开始,一个指向数组的末尾。然后比较两个指针所指向的元素的平方,将较小的平方放到结果数组的末尾,并将对应的指针向前移动一位。重复这个过程直到一个指针到达数组的中间。
代码实现:
/*
* @lc app=leetcode.cn id=977 lang=javascript
*
* [977] Squares of a Sorted Array
*/
// @lc code=start
function sortedSquares(nums) {
let result = [];
let left = 0;
let right = nums.length - 1;
while (left <= right) {
let leftSquare = nums[left] * nums[left];
let rightSquare = nums[right] * nums[right];
if (leftSquare > rightSquare) {
result.push(leftSquare);
left++;
} else {
result.push(rightSquare);
right--;
}
}
return result;
}
// @lc code=end