


二. 思路

三. 代码
class Solution
{
public int numberOfArithmeticSlices(int[] nums)
{
DP dp=new DP();
return dp.work(nums);
}
}
class DP
{
static final int N=(int)1e3+10;
int[][] f=new int[N][N];
HashMap<Integer, ArrayList<Integer>> mp=new HashMap<>();//值对应的下标
void init()
{
for(int i=0;i<N;i++)
Arrays.fill(f[i],0);
mp.clear();
}
int work(int[] a)
{
for(int i=0;i<a.length;++i)
if(mp.containsKey(a[i])) mp.get(a[i]).add(i);
else
{
ArrayList<Integer> list=new ArrayList<>();
list.add(i);
mp.put(a[i], list);
}
int ans=0;
for(int i=0;i<a.length;++i)
for(int j=0;j<i;++j)
{
long ak=2L*a[j]-a[i];
if(ak<Integer.MIN_VALUE||ak>Integer.MAX_VALUE) continue;
ArrayList<Integer> akl=mp.get((int)ak);//注意ak转成int
if(akl==null) continue;
for(int k:akl)
{
if(k>=j) break;
f[j][i]+=f[k][j]+1;
}
ans+=f[j][i];
}
return ans;
}
}