https://leetcode.com/problems/arithmetic-slices-ii-subsequence/#/description
找到乱序数组中所有gap相同的子序列个数
如1,3,5,7
map[i]作为<K, V>保存以A[i]为结尾的子序列,当gap为K时的子序列个数V
public class Solution {
public int numberOfArithmeticSlices(int[] A) {
int res = 0;
HashMap<Integer, Integer>[] map = new HashMap[A.length];
for (int i = 0; i < A.length; i++) {
map[i] = new HashMap();
for (int j = 0; j < i; j++) {
long diff = (long)A[i] - A[j];
if (diff > Integer.MAX_VALUE || diff < Integer.MIN_VALUE) {
continue;
}
int d = (int)diff;
int c1 = map[i].getOrDefault(d, 0);
int c2 = map[j].getOrDefault(d, 0);
// c2保存以A[j]为尾,gap为d的数组个数,如果把A[i]加到A[j]后面,
// 那么以A[j]为尾,gap为d的数组个数也是c2
res += c2;
map[i].put(d, c1 + c2 + 1);
}
}
return res;
}
}