开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
题目 leetcode.cn/
- 给你一个按 非递减顺序 排序的整数数组
nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例
-
输入: nums = [-4,-1,0,3,10];输出: [0,1,9,16,100]解释: 平方后,数组变为 [16,1,0,9,100];排序后,数组变为 [0,1,9,16,100]
-
输入: nums = [-7,-3,2,3,11];输出: [4,9,9,49,121]
提示
1 <= nums.length <= Math(10, 4)-Math(10, 4) <= nums[i] <= Math(10, 4)
代码
function sortedSquares(nums: number[]): number[] {
let result = [];
for(let i = 0; i < nums.length; i++){
result.push(Math.pow(nums[i], 2));
}
return result.sort((a, b) => { return a- b; });
};
- 数组中包含正整数和负整数,但是平方后一定都是正整数的
- 先求平方再排序
- 首先可以定义一个保存平方后的整数的数组
- 然后遍历给定的数组,将数组内的每一个值都平方一次,这里用的
Math.pow(a, b)方法用来求平方值,参数a是底数,参数b是指数幂,例如:Math(10, 2)就是求10的平方值 - 将平方后的正整数添加到定义好的变量数组中
- 利用数组的
sort方法将数组按照升序排序,返回结果即可
function sortedSquares(nums: number[]): number[] {
let result = nums.sort((a, b) => {return Math.abs(a) - Math.abs(b)});
let arr = [];
for(let i = 0; i < result.length; i++){
arr.push(Math.pow(result[i], 2));
}
return arr
};
-
先排序,再求平方值
- 首先利用数组的
sort方法按照升序排序数组,值得注意的是,排序的同时要把值转化为绝对值排序,因为负整数的平方后是正整数 - 然后遍历排序后的数组
- 同上,将数组的每一项求平方后添加到数组变量中,这里也可以用
nums[i] * nums[i]的方式求平方值 - 最后返回结果变量即可
- 首先利用数组的
-
附加题:请你设计时间复杂度为
O(n)的算法解决本问题