LeetCode 413. 等差数列划分(DP、数学)

等差数列划分
找出所有段最长的等差数列,假如说一段等差数列的长度为 n n ,那么就有 ( n 1 ) ( n 2 ) / 2 (n-1)*(n-2)/2 个子数组是等差数列数组。

class Solution {
public:
    int numberOfArithmeticSlices(vector<int>& a) {
        int n = a.size() ,ans = 0;
        vector<int> dp(n,0);
        for(int i=2;i<n;i++){
            if(a[i]+a[i-2] == 2*a[i-1]){
                dp[i] = dp[i-1]+1;
            }
        }
        for(int x:dp){
            ans += x;
        }
        return ans;
    }
};

这个想法与这道题十分相似,代码也即为相似。

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/107552278