给定一个升序数组1,元素有重复,对每个元素算一下平方后得到新的数组2,
问数组2中不相同的元素共有多少个?给出算法和空间复杂度,要求尽量优化
时间复杂度为O(n)空间复杂度为O(1)
public int repeat(int[] num) {
int left=0;
int right=num.length-1;
int count=0;
//先判断本身的重复项,然后再判断对称重复项
while(left<right) {
while(left+1<=right&&num[left]==num[left+1]) {
count++;
left++;
}
while(right-1>=left&&num[right]==num[right-1]) {
count++;
right--;
}
if(left<right) {
int x=num[left];
int y=num[right];
if(x+y==0) {
count++;
left++;
right--;
}else if(x+y<0) {
left++;
}else {
right--;
}
}
}
return count;
}
来源:CSDN
作者:qq_43641886
链接:https://blog.csdn.net/qq_43641886/article/details/104500915