前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【一天一大 lee】有序数组的平方 (难度:简单) - Day20201016

【一天一大 lee】有序数组的平方 (难度:简单) - Day20201016

作者头像
前端小书童
发布2020-11-03 10:09:29
3560
发布2020-11-03 10:09:29
举报
文章被收录于专栏:前端小书童

20201016

题目:

给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

示例:

  1. 示例 1:
代码语言:javascript
复制
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
  1. 示例 2:
代码语言:javascript
复制
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]

提示:

  1. 1 <= A.length <= 10000
  2. -10000 <= A[i] <= 10000
  3. A 已按非递减顺序排序。

抛砖引玉

思路

先遍历求平方(注意取绝对值),再排序

不知道本题题目描述时为什么要将非递减,而不直接讲递增,这样增加了理解题意的难度

抛砖引玉

代码语言:javascript
复制
/**
 * @param {number[]} A
 * @return {number[]}
 */
var sortedSquares = function(A) {
  return A.map((i) => Math.abs(i * i)).sort((a, b) => a - b)
}

双指针

本题循环求平方的逻辑可以忽略,主要考察的应该是数组排序的问题

只是本题因为涉及求平方,所以排序可以借助求平方的循环完成:

  • 以为 A 本身是递增的,那么平方的绝对值较大的原始一定出现在数组的首尾部分
  • 声明左右两个指针从 A 的头和尾分别计算
  • 两个指针上面的数谁大谁先存放到结果数组中
  • 存放顺序从后向前(从大到小)
代码语言:javascript
复制
/**
 * @param {number[]} A
 * @return {number[]}
 */
var sortedSquares = function(A) {
  let len = A.length,
    _result = [],
    left = 0,
    right = len - 1,
    index = len - 1
  while (left <= right) {
    if (A[left] * A[left] > A[right] * A[right]) {
      _result[index] = A[left] * A[left]
      ++i
    } else {
      _result[index] = A[right] * A[right]
      --right
    }
    --index
  }
  return _result
}

博客: 前端小书童

每天的每日一题,写的题解会同步更新到公众号一天一大 lee 栏目 欢迎关注留言

公众号:前端小书童

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小书童 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
    • 示例:
      • 提示:
      • 抛砖引玉
        • 双指针
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档