Google – Sort Squares
有一个sorted array of doubles, 要求返回另一个sorted array, 其中每个元素是input array里每个元素的平方。
[Solution]
Two pointers
[Note]
注意负数的情况,负数的平方是递减的。
还有一点要特别注意的是,Java中有个精度问题,注意到code里用了BigDecimal来做乘法,这是因为如果直接用double做乘法
Read full article from Google – Sort Squares
有一个sorted array of doubles, 要求返回另一个sorted array, 其中每个元素是input array里每个元素的平方。
[Solution]
Two pointers
[Note]
注意负数的情况,负数的平方是递减的。
还有一点要特别注意的是,Java中有个精度问题,注意到code里用了BigDecimal来做乘法,这是因为如果直接用double做乘法
0.2 * 0.2 = 0.04000000000000001.BigDecimal可以解决。就因为这一点,给了4星,要记住。算法本身其实就是1星题目…
  public double[] sortedSquares(double[] nums) {    double[] result = new double[nums.length];    if (nums == null || nums.length == 0) {      return result;    }         int k = nums.length - 1;    int l = 0;    int r = nums.length - 1;    while (l <= r) {      if (nums[l] * nums[l] > nums[r] * nums[r]) {        result[k--] = new BigDecimal(String.valueOf(nums[l])).multiply(new BigDecimal(String.valueOf(nums[l]))).doubleValue();        l++;      }      else {        result[k--] = new BigDecimal(String.valueOf(nums[r])).multiply(new BigDecimal(String.valueOf(nums[r]))).doubleValue();        r--;      }    }    return result;  }