等差数列的划分

萝らか妹 提交于 2019-12-10 18:36:27

等差数列的划分

题目

如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。
例如:

以下数列为等差数列:

1, 3, 5, 7, 9
7, 7, 7, 7
3, -1, -5, -9

以下数列不是等差数列:

1, 1, 2, 5, 7

破题

最直接的方法:
很容易知道A[P] ~ A[Q]是等差数列的前提是A[P] ~ A[Q-1]也是等差数列,并且A[Q] - A[Q - 1] = d(公差)。按照数学的角度讲,只有一个数字和有两个数字的数列也是等差数列,但是题目中要求包含三个元素。

解题

class Solution {
    public int numberOfArithmeticSlices(int[] A) {
        int length = A.length;
        if(length < 3)
            return 0;
        //dp[p][q] == true 表示A[P]~A[Q]为等差数列
        boolean[][] dp = new boolean[length][length];
        int count = 0;
        for(int q = 1; q < length; q++){
            for(int p = 0; p < q; p++){
                //只有两个数字或三个数字成等差是等差数列
                if(q - p <= 1 ||(dp[p][q - 1] && A[q] - A[q - 1] == A[q - 1] - A[q - 2])){
                    dp[p][q] = true;
                    if(q - p >= 2)
                        count++;
                }
            }
        }
        return count;
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!