给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。举例:
nums = {-1,1,1,1},
那么你应该返回的是:1。因为这个数组所有数的平方取值都是1,只有一种取值
nums = {-1,0,1,2,3}
你应该返回4,因为nums数组所有元素的平方值一共4种取值:1,0,4,9
public int countNum(int[] nums) {
int n = nums.length;
int lo = 0, hi = n-1;
int count = 0;
while (lo <= hi) {
if (nums[lo] + nums[hi] > 0) {
int tmpNumHi = nums[hi];
while (lo <= hi && nums[hi] == tmpNumHi) hi--;
count++;
}
else if (nums[lo] + nums[hi] < 0) {
int tmpNumLo = nums[lo];
while (lo <= hi && nums[lo] == tmpNumLo) lo++;
count++;
}
else if (nums[lo] + nums[hi] == 0) {
int tmpNumLo = nums[lo];
int tmpNumHi = nums[hi];
while (lo <= hi && nums[lo] == tmpNumLo) lo++;
while (lo <= hi && nums[hi] == tmpNumHi) hi--;
count++;
}
}
return count;
}