JS leetcode 有序数组的平方 题解分析,灵活运用Math.pow与Math.abs方法
壹 ❀ 引
郁闷的周一,晚上来做一道简单的算法题提提神,题目来自leetcode977. 有序数组的平方,题目描述如下:
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
示例 2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A 已按非递减顺序排序。
我们来简单分析题目,再来说说如何实现它。
贰 ❀ 引 解题思路
题目要求很简单,给定一个升序排列的数组,让我们求数组中每个元素的平方数,并用这些数字再组成一个升序排列的数组。
根据数字范围,很明显数字可能是负数,但是我们知道即便是负数也满足负负得正,所以不管了,直接使用map求出平方数组,并再次排序:
/**
* @param {number[]} A
* @return {number[]}
*/
var sortedSquares = function(A) {
return A.map(item => item * item).sort((a, b) => a - b);
};
因为map返回一个新数组,所以我们再对数组进行排序即可。
刚提交完毕,突然想起Math对象中有专门求幂的API pow,于是再次修改代码:
/**
* @param {number[]} A
* @return {number[]}
*/
var sortedSquares = function(A) {
// item是你要求幂的数字,第二参数是你希望求几次幂
return A.map(item => Math.pow(item, 2)).sort((a, b) => a - b);
};
提交发现相比第一次提交快了不少,不知道是不是例子问题

那么还有没有其它解决方案呢,有,使用双指针,思路是这样:
我们用左右两个指针i,j分别指向数组头部和尾部,第一次遍历同时取出第一位与最后一位使用abs求绝对值,进行大小比较。
可能有同学对于abs方法求绝对值比较陌生,直接上例子:
Math.abs(-1);//1
Math.abs(-10);//10
Math.abs(10);//10
通过绝对值,如果左边数字大,自然平方更大,那么使用unshift将平方加入新数组,并让 i 自增;如果右边数字大,使用unshift加入新数组并让 j 自增。这里只管将更大的数字unshift依次加入数组即可,只是自增的指针不同。
我们直接上代码:
/**
* @param {number[]} A
* @return {number[]}
*/
var sortedSquares = function (A) {
var i = 0, //左指针
j = A.length - 1, //右指针
A_ = []; //新数组
while (i <= j) {
// 始终将更大的数加入新数组
if (Math.abs(A[i]) > Math.abs(A[j])) {
A_.unshift(Math.pow(A[i], 2));
i++;
} else {
A_.unshift(Math.pow(A[j], 2));
j--;
}
};
return A_;
};
当然,相比我们最初的实现使用了更多地API,实际上更麻烦了,不过这里也只是提供一种解题思路。
那么到这里本题结束。
JS leetcode 有序数组的平方 题解分析,灵活运用Math.pow与Math.abs方法的更多相关文章
- LeetCode977. 有序数组的平方
问题:977. 有序数组的平方 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1,0,3,10] 输出:[0,1,9,1 ...
- 有序数组的平方&长度最小的子数组&螺旋矩阵Ⅱ
一.有序数组的平方 977.有序数组的平方 leetcode链接 1.方法概述 双"指针"解法:因为数组本来是有序的,平方后可能出现的两端大数值大的情况.所以从数组两端开始遍历,谁 ...
- 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
977.有序数组的平方 :https://leetcode.cn/problems/squares-of-a-sorted-array/ 心得:周末再写... public class Solutio ...
- leetcode-977. 有序数组的平方
leetcode-977. 有序数组的平方 (来自 120周赛) 题意 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1 ...
- 代码随想录训练营day 2 |977有序数组的平方 209.长度最小的子数组 (C++)
977.有序数组的平方 题目链接:977.有序数组的平方 题目描述:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序. 例子如下: 输入 ...
- leetcode之有序数组的平方
题目描述: 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1,0,3,10] 输出:[0,1,9,16,100] 示例 ...
- LeetCode 977. Squares of a Sorted Array (有序数组的平方)
题目标签:Array 题目给了我们一组 从小到大的 integers,让我们平方数字 并且 也排序成 从小到达. 因为有负数在里面,平方后,负数在array的位置会变动. 可以设left 和 righ ...
- 代码随想录第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
2022/09/22 第二天 第一题 这题我就直接平方后排序了,很无脑但很快乐啊(官方题解是双指针 第二题 滑动窗口的问题,本来我也是直接暴力求解发现在leetCode上超时,看了官方题解,也是第一次 ...
- [Swift]LeetCode977. 有序数组的平方 | Squares of a Sorted Array
Given an array of integers A sorted in non-decreasing order, return an array of the squares of each ...
- 977. Squares of a Sorted Array有序数组的平方
网址:https://leetcode.com/problems/squares-of-a-sorted-array/ 双指针法 把左端的元素和右端的元素比较后挑出绝对值大的,将其平方放入ans中,并 ...
随机推荐
- java占位符%d,%s等的使用
(转载自:http://www.cnblogs.com/happyday56/p/3996498.html) String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语 ...
- APP Inventor的tcp连接扩展插件ClientSocketAl2Ext
参考原文:https://www.cnblogs.com/bemfa/p/13390251.html 下载地址:https://wwtl.lanzoum.com/ik0Ky1clu41a B站关联学习 ...
- JS - console多个值
Promise.all([p1, p2]).then( (res) => { let [p1, p2] = res; console.l ...
- Linux-文件压缩-tar-gzip
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.26)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- [转帖]Linux中split大文件分割和cat合并文件详解
https://www.yingsoo.com/news/servers/70195.html 当需要将较大的数据上传到服务器,或从服务器下载较大的日志文件时,往往会因为网络或其它原因而导致传输中断而 ...
- [转帖]-O1,-O2,-O3编译优化知多少
1.从.c文件到可执行文件,其间经历了几步? 高级语言是偏向人,按照人的思维方式设计的,机器对这些可是莫名奇妙,不知所谓.那从高级语言是如何过渡到机器语言的呢?这可是一个漫长的旅途呀! 其中,得经历这 ...
- [转帖]03-rsync传输模式(本地传输、远程方式传输、守护进程模式传输)
https://developer.aliyun.com/article/885801?spm=a2c6h.24874632.expert-profile.282.7c46cfe9h5DxWK 简介: ...
- 【如何提高IT运维效率】深度解读京东云基于NLP的运维日志异常检测AIOps落地实践
作者:京东科技 张宪波.张静.李东江 基于NLP技术对运维日志聚类,从日志角度快速发现线上业务问题 日志在IT行业中被广泛使用,日志的异常检测对于识别系统的运行状态至关重要.解决这一问题的传统方法需 ...
- element-ui中Select 选择器列表内容居中
<el-select class="my-el-select" v-model="tenantCont" placeholder="请输入机构标 ...