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