有序数组的平方
一、LeetCode题解
瞧一瞧~
- 博健的LeetCode题解:Gitbook版本传送门
- 博健的LeetCode题解:CSDN传送门
- 有趣的CSS:Gitbook传送门
- 前端进阶笔记:Gitbook传送门
做题路线( ** =当前阶段)
- 阶段一(解题总数,单题题解数至上)**
- 阶段二(解题质量至上)
- 阶段三(算法思想至上)
二、算法题
题目
给定一个按非递减顺序排序的整数数组 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 已按非递减顺序排序。
解法一(排序)
思路
💡创建一个新的数组,它每个元素是给定数组对应位置元素的平方,然后排序这个数组。
复杂度分析
- 时间复杂度:O(NlogN),其中 N 是数组 A 的长度。
- 空间复杂度:O(N)。
var sortedSquares = function(A) {
var arr = []
A.forEach(item => {
arr.push(item * item)
});
arr.sort((a, b) => {
return a - b
})
return arr
};
解法二(双指针)
思路
因为数组 A 已经排好序了(根据正负值)
举例:[-4,-1,0,3,10]
可以分为 [-4,-1]
和[0,3,10]
- 🚨负数数组的平方是倒叙,即[16, 1]
- 使用两个指针记录正、负部分 —— 指针 i 反向读取负数部分,指针 j 正向读取非负数部分。