题目描述
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
难点
- 最大值一定是从数组两端产生的
- 双指针的移动是有条件的。
思路
双指针法:
代码
/**
* @param {number[]} nums
* @return {number[]}
*/
var sortedSquares = function(nums) {
let result=[]; //结果数组
let k=nums.length-1;//结果数组的下标
//i指针:从数组头开始移动
// j指针: 从数组尾开始移动
for(let i=0,j=nums.length-1;i<=j;){
let r=nums[i]*nums[i],m=nums[j]*nums[j]; //得到元素值得平方
//对比大小
if(r>=m){
result[k]=r;
i++;
k--;
}else{
result[k]=m;
j--;
k--;
}
}
return result;
};
结果
总结
- 要明白
i, j, k代表的意思。 - 有条件的控制指针的移动。