Day 07 : Squares of a Sorted Array

题目简述:
一个由小到大排列的整数阵列,写一个函式回传每个元素的平方,并且也是由小到大排列

Input: nums = [-7,-3,2,3,11]
Output: [4,9,9,49,121]

直觉联想暴力解:
把每个数平方後,再把结果sort,而这个方法也适用一开始给的array没有sort过

时间复杂度:O(nlogn)
空间复杂度:O(n)

function sortedSquaredArray(array) {
  //建一个和array一样大小的Array并全部填入0
  const sortedSquares = new Array(array.length).fill(0);
  for (let i = 0; i < array.length; i++) {
    const value = array[i];
    //把原本的array元素依序平放後放到创建的sortedSquares
    sortedSquares[i] = value * value;
  }
  return sortedSquares.sort((a, b) => a - b);
}

当然暴力後一定要尝试优化!
想想看如何达到O(n)的时间?
但这个方法成立的前提是一开始array已经是由小到大排列好的
那我们应该要怎麽做?

以Array = [-7,-5,-3,2,3,8,11]为例
我们都知道,越小的负数平方会变成越大的数,且一开始最小的负数会在最左边,最大的数会在最右边

如此,我们可以拿阵列最右边的元素去和最左边的数,两者以绝对值做比较,谁的平方大谁就摆在最右边
相信经过前两天利用指标的方式解题,心里一定有些想法了!!?

没错,就是给建立一个start pointer 和 end pointer分别指向阵列的头尾

一样我们先宣告一个一样大小且塞满0的阵列:[0,0,0,0,0,0,0]

  1. | -7 | < | 11 | → [0,0,0,0,0,0,121]
  2. | -7 | < | 8 | → [0,0,0,0,0,64,121]
  3. | -7 | > | 3 | → [0,0,0,0,49,64,121]

以此类推...

这个方法就可以在O(n)的时间内解决,而且我们只需要检查一次,空间复杂度一样要 O(n)来建立结果


var sortedSquares = function(nums) {
  const sortedSquares = new Array(nums.length).fill(0);
  let start = 0;
  let end = nums.length - 1;
  for (let i = nums.length - 1; i >= 0; i--) {
    const smallerVal = nums[start];
    const biggerVal = nums[end];
    if (Math.abs(smallerVal) > Math.abs(biggerVal)) {
      sortedSquares[i] = smallerVal * smallerVal;
      start++;
    } else {
      sortedSquares[i] = biggerVal * biggerVal;
      end--;
    }
  }
  return sortedSquares;
};

明日预告:找出最绵延的山 Longest Mountain in Array


<<:  Golang 转生到web世界 - Gin HTML渲染

>>:  【Day 9】梯度下降法(Gradient Descent) --- Tip 2, 3

[Day19] CH10:排序大家族——实验

咦?怎麽还是排序呢?没错!经过前四天的学习,我们今天要来做一个小实验,比较各个排序演算法在相同巨量数...

第八天:安装 IntelliJ IDEA

为了在後续章节里示范 TeamCity 可以怎麽协助我们建置专案及一系列的自动化,我们需要有一个可以...

用心看待这个世界

从第一份工作开始跟同事们保持着不冷也不热的距离,毕竟在工作上带着太多私情做事上有些时候会很难进行。不...

Feedly 和 Inoreader,用RSS阅读器蒐集实用数位行销blog推荐资讯

这个实用网路行销工具系列文,将会整理我平常研究的各项网路行销工具,帮助工程师如果有现成的服务可以快速...

Vue3 ( Router ) -5

1.Router Router负责分配工作 後端路由 全部的页面传递(同大专) 前端路由 #模拟路径...