给个有序数组,然后求元素平方后不重复的元素个数,例如[-10, -10, -5, 0, 1, 5, 8, 10]
直接方法:
int NotRep(int a[],int n){
int *b= new int[n];
int k=0;
bool flag=false;
for(int i=0;i<n;i++){
int temp=a[i]*a[i]; //a[i]**2
for(int j=0;j<k;j++ ){
flag=false;
if(temp==a[j]){
flag=true;
break;
}
}
if(flag==true){
}
else{
k++;
a[k-1]=temp;
}
}
return k;
}
上面时间复杂度应该是O(n^2)
优化以后算法—>O(n):
int NotRepAI(int a[],int n){
int i=0,j=n-1;
int count=0;
while(i<j){
if(a[i]==a[i+1]){
i++;
}
if(a[j]==a[j-1]){
j--;
}
else{
if(abs(a[i])>abs(a[j])){
// cout<<a[i]<<" "<<a[j]<<endl;
cout<<"i "<<i<<"> j "<<j<<endl;
i++;
count++;
}
else{
if(abs(a[i])<abs(a[j])){
// cout<<"i "<<i<<"< j "<<j<<endl;
j--;
count++;
}
else{
if(abs(a[i])==abs(a[j])){
// cout<<"i "<<i<<"= j "<<j<<endl;
i++;
j--;
count++;
}
}
}
}
}
return ++count;
}
++count 返回值真的是+1值,count++返回值还是count。