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中,并 ... 
随机推荐
- maven总结二: 常用标签及属性
			本文为博主原创,未经允许不得转载 目录: 1. maven 依赖属性:groupId.artifactId.version 2.插件执行: execution,id ,phase,goals,con ... 
- 【TouchGFX】Widgets and Containers
			Widgets and Containers 是 TouchGFX 应用最基础的东西,他们贯穿于 UI 的整个开发,属于 TouchGFX 的预制组件,同时也支持自定义实现 Widgets Widge ... 
- phpcms - 获取单网页 , 例如关于我们
			{pc:get sql="select * from phpcms_page where catid=2" num="1"} {loop ... 
- Oracle 监控客户端的连接数量趋势
			Oracle 监控客户端的连接数量趋势 背景 前期简单总结了table方式将表信息展示出来的方法 但是感觉这样非常不直观. 想着能够做出一个趋势来. 时序数据库的最佳的使用方式. 之前的确是太靠自己的 ... 
- [转帖]2.2.1 Lightning 工作原理
			https://book.tidb.io/session2/chapter2/lightning-internal.html TiDB Lightning 工具支持高速导入 Mydumper 和 CS ... 
- [转帖]jmeter实现分布式压测
			分布式实现的前提条件: 1.master机器和奴隶机的jmeter要一致 a. jmeter版本要一致 b.jdk主要版本要一致,比如都是jdk1.8,后面的小版本不一样不影响 c.jmeter脚本中 ... 
- stress-NG 磁盘测试结果-全国产信创部分验证
			stress-NG 磁盘测试结果 摘要 前几天分别还是用了redis-benchmark还有specjvm2008进行了多种系统的压测 得出了信创CPU的一些简单结论 但是一直还没有压测磁盘, 今天想 ... 
- CPU实际频率查看
			cat /sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_cur_freq 
- [转帖]谈 JVM 参数 GC 线程数 ParallelGCThreads 合理性设置
			https://my.oschina.net/u/4090830/blog/7926038 1. ParallelGCThreads 参数含义 在讲这个参数之前,先谈谈 JVM 垃圾回收 (GC) 算 ... 
- 最小化安装的CentOS7 上面安装Oracle12C的简单过程
			首先声明自己对静默安装不熟,也害怕初问题,所以不使用静默安装的方式. 因为是最小化安装,所以必须安装GUI界面才可以,以下是过程(早上回忆的,全文字,无截图) 1. 安装GUI界面 yum group ... 
