LeetCode:977.双指针 有序数组的平法 JavaScript

代码随想录 (programmercarl.com)

方法1:暴力排序

 var sortedSquares = function (nums) {
        const newArr = [];
        nums.forEach((item, index) => {
          newArr[index] = item * item;
        });
        newArr.sort((a, b) => {
          return a - b;
        });

        return newArr;
      };
      console.log(sortedSquares([-7, -3, 2, 3, 11]));

方法2:双指针:两个指针指向数组的最左边和最右边,互相比较,大的放进数组,然后向左或者向右移动,接着继续比较,大的放进数组,直到两个指针指向同一个位置,这时候值是相等的,把那个值放进新数组索引为0的位置,index小于0了,退出循环。

 var sortedSquares2 = function (nums) {
        const newArr = [];
        let begin = 0;
        let end = nums.length - 1;
        let index = end;
        while (index >= 0) {
          if (nums[begin] * nums[begin] < nums[end] * nums[end]) {
            newArr[index] = nums[end] * nums[end];
            end--;
          } else {
            newArr[index] = nums[begin] * nums[begin];
            begin++;
          }
          index--;
        }
        return newArr;
      };
      console.log(sortedSquares2([-7, -3, 2, 3, 11]));
      /* 
      最大元素一定在两边
      两个指针逐步向中间合拢,然后慢慢给新数组赋值,赋值到最后,两个指针一定会指向同一个元素
      这个元素就是新数组的arr[0],也就是最小值。
      新数组也是下标从大到小更新。
      就是肯定要比较的次数就是数组长度的次数。
      比较的元素的平方比较大的,指针向左或者向右移动。
      */

      //优化一下

      var sortedSquares3 = function (nums) {
        const newArr = [];
        let begin = 0;
        let end = nums.length - 1;
        let index = end;
        while (index >= 0) {
          let left = nums[begin] * nums[begin];
          let right = nums[end] * nums[end];
          if (left < right) {
            newArr[index--] = right;
            end--;
          } else {
            //包括等于
            newArr[index] = left;
            begin++;
          }
        }
        return newArr;
      };
      console.log(sortedSquares3([-7, -3, 2, 3, 11]));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值