美文网首页数据解构和算法
61.有序数组的平方

61.有序数组的平方

作者: wo不是黄蓉 | 来源:发表于2022-02-22 16:31 被阅读0次

day13: 977. 有序数组的平方(简单)

思路:

  • 直接解法:先算平方再用sort方法
  • 使用双指针1:因为数组是有序的,因此可以先将数组划分为两部分,大于0的部分小于等于0的部分。然后,从中间开始往两头趋近,需要注意的是,需要判断左侧和右侧是否还有值,如果有值需要处理后续节点。
  • 使用双指针2:和上面双指针定义的不同,第三种方法是从最左和最右两边开始比较的,因此不用考虑【判断左侧和右侧是否还有值】的情况。
    第一种方法:
var sortedSquares = function (nums) {
  let result = [];
  nums.forEach((item) => {
    result.push(Math.abs(item) * Math.abs(item));
  });
  return result.sort((a, b) => {
    return a - b;
  });
};

第二种方法:指针从中间趋于两边

var sortedSquares1 = function (nums) {
  let n = nums.length;
  //记录分界点
  let negative = -1;
  for (let i = 0; i < n; ++i) {
    if (nums[i] < 0) {
      negative = i;
    } else {
      break;
    }
  }
  //目标数组
  let ans = [];
  let index = 0,
    i = negative,
    j = negative + 1;
  //i<0左侧已经到头,j>=n右侧已经到头
  while (i >= 0 || j < n) {
    if (nums[i] * nums[i] >= nums[j] * nums[j]) {
      ans.push(nums[j] * nums[j]);
      j++;
    } else if (nums[i] * nums[i] < nums[j] * nums[j]) {
      ans.push(nums[i] * nums[i]);
      i--;
    } else if (i < 0) {
      // 处理右侧后续节点
      ans[index] = nums[j] * nums[j];
      j++;
    } else if (j >= n) {
      //处理左侧后续节点
      ans[index] = nums[i] * nums[i];
      i--;
    }
    ++index;
  }
  return ans;
};

第三种方法:

var sortedSquares2 = function (nums) {
  let n = nums.length,
    ans = [];
  for (let i = 0, j = n - 1, pos = n - 1; i <= j; ) {
//指针从两边趋于中间
    if (nums[i] * nums[i] > nums[j] * nums[j]) {
      ans[pos] = nums[i] * nums[i];
      ++i;
    } else {
      ans[pos] = nums[j] * nums[j];
      --j;
    }
    --pos;
  }
  return ans;
};

相关文章

  • 61.有序数组的平方

    day13: 977. 有序数组的平方[https://leetcode-cn.com/problems/squa...

  • 有序数组的平方

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

  • 有序数组的平方

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

  • 有序数组的平方

    题目: 题目的理解: 分两步:1. 计算每一个数字的平方值。 2. 再对数字进行排序。 python实现 提交 /...

  • 有序数组的平方

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

  • LeetCode 每日一题 [33] 有序数组的平方

    LeetCode 有序数组的平方 [简单] 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组...

  • 第 2 天 双指针

    977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组...

  • ARTS Week 01

    Algorithm 题目 977. 有序数组的平方给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的...

  • 977. 有序数组的平方

    //977. 有序数组的平方https://leetcode-cn.com/problems/squares-of...

  • 977. 有序数组的平方

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

网友评论

    本文标题:61.有序数组的平方

    本文链接:https://www.haomeiwen.com/subject/mzmglrtx.html