https://leetcode.com/problems/arithmetic-slices-ii-subsequence/
借助一个map [j] 表示从开始元素 i 到 截止元素 j 间隔为 diff 的数组个数,其中包括数组长度大于等于3和等于2的数组。
class Solution {
public int numberOfArithmeticSlices(int[] A) {
int len = A.length;
long ans = 0;
Map<Integer, Integer>[] map = new Map[len];
for(int i=0; i<len; i++){
map[i] = new HashMap<>();
for(int j=0; j<i; j++){
long delta = (long)A[i] - (long)A[j];
if(delta < Integer.MIN_VALUE || delta > Integer.MAX_VALUE){
continue;
}
int diff = (int)delta;
int sum = map[j].getOrDefault(diff, 0);
int origin = map[i].getOrDefault(diff, 0);
map[i].put(diff, sum+origin+1);
ans += sum;
}
}
return (int)ans;
}
}