【资源限制】
时间限制:1.0s 内存限制:256.0MB
【问题描述】
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中N个整数。现在给出这N个整数,小明想知道包含这N个整数的最短的等差数列有几项?
【输入格式】
输入的第一行包含 一个整数N。
第二行包含N个整数A1,A2,… ,AN。(注意A1 ~ AN并不一定是按等差数列中的顺序给出)
【输出格式】
输出一个整数表示答案。
【样例输入】
5
2 6 4 10 20
【样例输出】
10
【样例说明】
包含2、6、4、10、20的最短的等差数列是2、4、6、8、10、12、 14、 16、18、20。
【评测用例规模与约定】
对于所有评测用例,2≤N≤10000,0≤Ai≤ 109。
import java.io.BufferedInputStream;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(new BufferedInputStream(System.in));
int n = in.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
Arrays.sort(arr); // 将数列排序
int cha = Integer.MAX_VALUE; // 公差
for (int i = 1; i < n; i++) {
cha = Math.min(cha, arr[i] - arr[i - 1]); // 利用Math.min求出最小公差值
}
if (cha == 0) {
System.out.println(n);
}
int temp = ((arr[n - 1] - arr[0]) / cha) + 1; // 项数=(末项-首项)/公差+1
System.out.println(temp);
}
}