import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
long[] a = new long[n];
for (int i = 0; i < a.length; i++) {
a[i] = scanner.nextLong();
}
scanner.close();
Arrays.sort(a);
long d = a[1] - a[0];
for (int i = 0; i < a.length - 2; i++) {
d = Math.min(d, a[i + 2] - a[i + 1]);
if (d == 0) {
break;
}
if (a[i] / d == 0) {
break;
}
}
if (d == 0) {
System.out.println(a.length);
}else {
System.out.println(a[a.length - 1] / d);
}
}
}
测试用例只对了几个,不知道还有哪里没考虑到QAQ。
其中d是公差,设想是当知道公差和最大的一项,两者相除就可以得出最短序列了
-=-=-=-=
你弄错了2点
1.先说简单的1点,只知道公差和最大一项,你不管最小的一项吗,数列有头有尾,你直接最大项除以公差,是默认最小项一定是0吗
2.公差可不是a[1]-a[0]这样算的,也不是求数列里相减的最小值
比如0,4,10这个数列,明显公差既不是4也不是6,而是2,你要求所有相邻项的最大公约数
其中d是公差,设想是当知道公差和最大的一项,两者相除就可以得出最短序列了