解题步骤:
参考代码:
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& nums) {
int n=nums.size();
//把元素和它对应的所有下标绑定存放到哈希表中
unordered_map<double,vector<int>> hash;
for(int i=0;i<n;i++)
{
hash[nums[i]].push_back(i);
}
//dp表的值全是0,无需初始化
//填表
vector<vector<int>> dp(n,vector<int>(n));
int ret=0;
for(int j=2;j<n;j++)
{
for(int i=1;i<j;i++)
{
double b=nums[i];
double c=nums[j];
double a=2*b-c;
if(hash.count(a))
{
for(const auto& k:hash[a])
{
//符合题意的k对应的dp[k][i]都要加等到dp[i][j]上
if(k<i)
{
dp[i][j]+=dp[k][i]+1;
}
//后面的下标一定都是大于等于i的
else
{
break;
}
}
//统计次数
ret+=dp[i][j];
}
}
}
//返回值
return ret;
}
};
你学会了吗???