Bootstrap

数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中N 个整数。 现在给出这N 个整数,小明想知道包含这N 个整数的最短的等差数列有几项?

蓝桥杯例题:
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中N 个整数。
现在给出这N 个整数,小明想知道包含这N 个整数的最短的等差数列有几项?
输入的第一行包含一个整数N。
第二行包含N 个整数A1.A2,…, AN。(注意A1<=AN 并不一定是按等差数列中的顺序给出)
2<=N<=100000,0<=Ai<=10^9
输出一个整数表示答案。

思路:
先将数组的元素由小到大进行排序,因为已经知道是等差数组,所以两个相邻的数之间的差就是数列的公差,算出公差后,项数等于末项减去首项的差除以公差再加一

代码如下:

public class DengCha {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int N= sc.nextInt();

        ArrayList<Integer> list=new ArrayList<>();
        for (int i = 0; i < N; i++) {
            int x=sc.nextInt();
            list.add(x);
        }
        //排序,前减后为升序,后减前为降序
        list.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;
            }
        });
        //int d=0;
        //记录最小差值为公差
        int d=list.get(1)-list.get(0);
        for (int i = 0; i < list.size(); i++) {
            for (int j=i+1;j<list.size();j++){
                if(list.get(j)-list.get(i)<d){
                    d=list.get(j)-list.get(i);
                }
            }
        }
        //项数=末项-首项/公差 +1
        int n=(list.get(list.size()-1)-list.get(0))/d;
        System.out.println(n+1);
    }
}
;