cpp
#include <bits/stdc++.h>
using namespace std;
int n, x, len, a[100010], ans;
set<int> s;
set<int>::iterator asd;
int main()
{
/*
a[n-1] 是最大的
a[n-2] 可能是次大的
a[n]%a[n-1]<a[n-1] 不可能是最大的,可能是次大的
a[n-1]%a[n-2]<a[n-2] 不可能是次大的
a[n-2]%a[n-3]<a[n-3] 不可能是次大的
所以次大值在a[n-2]和a[n]%a[n-1]中取得,为两者中的最大值
*/
scanf("%d", &n);
//set会自动从小到大排序
for(int i=1; i<=n; ++i){
scanf("%d", &x);
s.insert(x);
}
n=int(s.size()); //获取不重复的数字个数
asd=s.begin();
//将数字存在a数组中
for(int i=1; i<=n; ++i){
a[i]=*asd; //asd 是迭代器
asd++;
}
//原数只有 1 个
if(n==1){
printf("-1");
}
else if(n==2){ //原数有两个, 则余数为 a[n-1] 和 a[n]%a[n-1]<a[n-1]
printf("%d", a[n]%a[n-1]);
}
else{ //原数至少 3 个
ans=max(a[n]%a[n-1], a[n-2]);
printf("%d", ans);
}
return 0;
}