Blog.

有序数组的平方

Cover Image for 有序数组的平方
Bernie
Bernie

有序数组的平方

leetcode 链接

思路:

双指针,左指针指向数组的最小值,右指针指向数组的最大值, 然后左指针小于或者等于右指针进行循环,如果左指针的平方大于右指针的平方, 则将左指针的平方放到结果数组中的最右位置,,然后左指针+1,结果数组最右指针-1, 否则将右指针的平方放到结果数组中的最右位置,然后右指针-1,结果数组最右指针-1,最后返回结果数组即可。

typescript 解法

function sortedSquares(nums: number[]): number[] {
  const numsLength = nums.length;
  let left = 0;
  let right = numsLength - 1;
  let rightIndex = right;
  let result: number[] = new Array(numsLength);
  while (left <= right) {
    let leftSquare = nums[left] * nums[left];
    let rightSquare = nums[right] * nums[right];
    if (leftSquare > rightSquare) {
      result[rightIndex] = leftSquare;
      left++;
    } else {
      result[rightIndex] = rightSquare;
      right--;
    }
    rightIndex--;
  }
  return result;
}

go 解法

func sortedSquares(nums []int) []int {
    lenN := len(nums)
    left := 0
    right := lenN - 1
    res := make([]int, lenN)
    resIndexx := lenN - 1
    for left <= right {
        leftPower := nums[left] * nums[left]
        rightPower := nums[right] * nums[right]
        if leftPower > rightPower {
            res[resIndexx] = leftPower
            left ++
            resIndexx --
        } else {
            res[resIndexx] = rightPower
            right --
            resIndexx --
        }
    }
    return res
}