1,题目描述
2,题目分析
开始想到的是如果A[i]到A[j]为一个等差数列,即dp[i][j] = 1,那么如果A[j+1]-A[j]等于该等差数列的差,那么A[i]到A[j+1]也为一个等差数列,但是运行的时候超出内存限制了。
3,代码实现
/*
* @lc app=leetcode.cn id=413 lang=cpp
*
* [413] 等差数列划分
*/
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
int len = A.size();
vector<vector<int>> dp;
dp.resize(len);
int ans = 0;
for(int i = 0; i < len; i ++)
dp[i].resize(len, 0);
for(int i = 0; i <= (len - 3); i ++)
{
if(A[i + 2] - A[i + 1] == A[i + 1] - A[i])
{
dp[i][i + 2] = 1;
ans ++;
}
}
for(int d = 3; d <= len - 1; d ++)
for(int i = 0; i + d < len; i ++)
{
if(dp[i][i + d - 1] == 1)
{
if(A[i + d] - A[i + d - 1] == A[i + d - 1] - A[i + d - 2])
{
dp[i][i + d] = 1;
ans ++;
}
}
}
return ans;
}
};