壹 ❀ 引

郁闷的周一,晚上来做一道简单的算法题提提神,题目来自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方法的更多相关文章

  1. LeetCode977. 有序数组的平方

    问题:977. 有序数组的平方 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1,0,3,10] 输出:[0,1,9,1 ...

  2. 有序数组的平方&长度最小的子数组&螺旋矩阵Ⅱ

    一.有序数组的平方 977.有序数组的平方 leetcode链接 1.方法概述 双"指针"解法:因为数组本来是有序的,平方后可能出现的两端大数值大的情况.所以从数组两端开始遍历,谁 ...

  3. 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

    977.有序数组的平方 :https://leetcode.cn/problems/squares-of-a-sorted-array/ 心得:周末再写... public class Solutio ...

  4. leetcode-977. 有序数组的平方

    leetcode-977. 有序数组的平方 (来自 120周赛) 题意 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1 ...

  5. 代码随想录训练营day 2 |977有序数组的平方 209.长度最小的子数组 (C++)

    977.有序数组的平方 题目链接:977.有序数组的平方 题目描述:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序. 例子如下: 输入 ...

  6. leetcode之有序数组的平方

    题目描述: 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1,0,3,10] 输出:[0,1,9,16,100] 示例 ...

  7. LeetCode 977. Squares of a Sorted Array (有序数组的平方)

    题目标签:Array 题目给了我们一组 从小到大的 integers,让我们平方数字 并且 也排序成 从小到达. 因为有负数在里面,平方后,负数在array的位置会变动. 可以设left 和 righ ...

  8. 代码随想录第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

    2022/09/22 第二天 第一题 这题我就直接平方后排序了,很无脑但很快乐啊(官方题解是双指针 第二题 滑动窗口的问题,本来我也是直接暴力求解发现在leetCode上超时,看了官方题解,也是第一次 ...

  9. [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 ...

  10. 977. Squares of a Sorted Array有序数组的平方

    网址:https://leetcode.com/problems/squares-of-a-sorted-array/ 双指针法 把左端的元素和右端的元素比较后挑出绝对值大的,将其平方放入ans中,并 ...

随机推荐

  1. java占位符%d,%s等的使用

    (转载自:http://www.cnblogs.com/happyday56/p/3996498.html) String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语 ...

  2. APP Inventor的tcp连接扩展插件ClientSocketAl2Ext

    参考原文:https://www.cnblogs.com/bemfa/p/13390251.html 下载地址:https://wwtl.lanzoum.com/ik0Ky1clu41a B站关联学习 ...

  3. JS - console多个值

     Promise.all([p1, p2]).then(         (res) => {           let [p1, p2] = res;           console.l ...

  4. Linux-文件压缩-tar-gzip

  5. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.26)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  6. [转帖]Linux中split大文件分割和cat合并文件详解

    https://www.yingsoo.com/news/servers/70195.html 当需要将较大的数据上传到服务器,或从服务器下载较大的日志文件时,往往会因为网络或其它原因而导致传输中断而 ...

  7. [转帖]-O1,-O2,-O3编译优化知多少

    1.从.c文件到可执行文件,其间经历了几步? 高级语言是偏向人,按照人的思维方式设计的,机器对这些可是莫名奇妙,不知所谓.那从高级语言是如何过渡到机器语言的呢?这可是一个漫长的旅途呀! 其中,得经历这 ...

  8. [转帖]03-rsync传输模式(本地传输、远程方式传输、守护进程模式传输)

    https://developer.aliyun.com/article/885801?spm=a2c6h.24874632.expert-profile.282.7c46cfe9h5DxWK 简介: ...

  9. 【如何提高IT运维效率】深度解读京东云基于NLP的运维日志异常检测AIOps落地实践

    作者:京东科技  张宪波.张静.李东江 基于NLP技术对运维日志聚类,从日志角度快速发现线上业务问题 日志在IT行业中被广泛使用,日志的异常检测对于识别系统的运行状态至关重要.解决这一问题的传统方法需 ...

  10. element-ui中Select 选择器列表内容居中

    <el-select class="my-el-select" v-model="tenantCont" placeholder="请输入机构标 ...