简而言之,思路是对数组做个去重排序,求相邻两个数之间的最大公因数
#include<bits/stdc++.h>
using namespace std;
int t;
int n;
int g[2000010];
bool same(){
int temp=g[1];
for(int i=2;i<=n;i++){
if(g[i]!=temp){return false;}
}
return true;
}
int main( )
{
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d",&g[i]);
}
//判断是否数组都一样
if(same()){printf("-1\n");}
else{
sort(g+1,g+1+n);
int n_new=unique(g+1,g+1+n)-(g+1);//对数组去重
for(int i=1;i<n_new;i++){
g[i]=g[i+1]-g[i];
}
int temp=g[1];
for(int i=2;i<n_new;i++){
temp=__gcd(temp,g[i]);
}
printf("%d\n",temp);
}
}
return 0;
}
排序+去重数组(需要先排序,在去重):
sort(g+1,g+1+n);
int n_new=unique(g+1,g+1+n)-(g+1);
//此时数组g已经排序+去重,数组g中元素的个数:n_new