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; }