LeetCode 413 Arithmetic Slices

晦若晨曦發表於2017-12-14

原題連結: Arithmetic Slices

題目大意:

題目說了一大堆,其實都是在給定義,目標就一句話:

求一個給定陣列中可以組成多少個等差數列(長度大於3)

解題思路:

首先呢,一個長度為n的等差數列,設m=n-2,則包括子數列在內,一共可以組成m*(1+m)/2個長度大於3的等差數列,簡單的數列求和。

然後只要知道陣列中每個等差數列的長度即可。

設定兩個標記start和end,分別代表當前等差數列的開始和結束為止。

設定標記sub,記錄數列差值,當差值與上次不等時,將start設定為end-1,即為重新開始一個新的數列。此時應將上一數列的統計數目新增到總數count中。

AC程式碼:

/**
     * 413. Arithmetic Slices
     * @param A
     * @return
     */
    public static int numberOfArithmeticSlices(int[] A){

        if(A.length<3)
            return 0;

        int start = 0,end = 1;
        int sub = A[end]-A[start],count=0;

        for(end = 1;end <A.length;end++){
            if(A[end]-A[end-1]!=sub||end == A.length-1){
                if(end-start>=2){
                    int l = end-start-1;
                    if(A[end]-A[end-1]!=sub){
                        l-=1;
                    }
                    count+= l*(1+l)/2;
                }
                start = end-1;
                sub = A[end]-A[start];
            }
        }

        return count;
    }

複製程式碼

相關文章