题目
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序
思考
看题目,我们要将数组种的每个值都成平方,排序之后也要按顺序。
方式1
- 首先我们需要遍历每个数据,为每个数组成平方,然后把这个数组
push到新的数组上, - 之后我们通过
sort排序,返回从小到大的数组
遍历,平方,并push到数组上
let len = nums.length, arr = []
for(let i = 0; i < len; i++) {
arr.push(nums[i]*nums[i])
}
利用sort排序
arr.sort((a,b) => a-b)
完整的代码如下
var sortedSquares = function(nums) {
let len = nums.length, arr = []
for(let i = 0; i < len; i++) {
arr.push(nums[i]*nums[i])
}
return arr.sort((a,b) => a-b)
};
方式2 利用map
这里利用map遍历每个item 同时让他们平方,之后再利用sort排序
return nums.map(item => item * item).sort((a, b) => a - b)
方式3
- 定义一个新得数组,存放结果
- 定义
left和right, 分别从左右两边开始遍历数组, - 将它们平方,然后比较大小,将大得插入头部
- 直到中间得指针撞上,然后返回数组
定义数组和指针
let result = [], left = 0, rigth = nums.length - 1
然后通过while循环,同时将他们平方
while(left <= rigth) {
let leftNum = nums[left] * nums[left], rightNum = nums[rigth] * nums[rigth]
}
然后比较大小,将大得插入头部,同时left++ right--
if(leftNum> rightNum) {
result.unshift(leftNum)
left++
} else {
result.unshift(rightNum)
rigth--
}
完整代码:
let result = [], left = 0, rigth = nums.length - 1
while(left <= rigth) {
let leftNum = nums[left] * nums[left], rightNum = nums[rigth] * nums[rigth]
if(leftNum> rightNum) {
result.unshift(leftNum)
left++
} else {
result.unshift(rightNum)
rigth--
}
}
return result
运行结果: