题目描述:
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
解题思路:
给定的数组为整数数组,也就是说会存在负数。最简单的方法就是先将每个数的平方 push 到一个新数组中,再 sort 一下。
另一个思路是,既然是非递减排序,那么边界的数的平方一定大于中间的数(不一定是哪边)。所以我们可以首尾双指针遍历数组,比较哪个数的平方较大,最后将较大的数的平方 unshift 到一个新数组中即可。
完整代码:
/**
* @param {number[]} nums
* @return {number[]}
*/
var sortedSquares = function(nums) {
var ans=[];
var left=0;
var right=nums.length-1;
while(left<=right){
if(Math.pow(nums[left],2)>=Math.pow(nums[right],2)){
ans.unshift(Math.pow(nums[left],2));
left++;
}
else{
ans.unshift(Math.pow(nums[right],2));
right--;
}
}
return ans;
};
欢迎指正!