题目
类型:数组
解题思路
根据等式关系进行移项可得:nums[a] + nums[b] = nums[d] - nums[c]
,其中各下标满足 a < b < c < d
在「逆序」枚举 b 时,将新产生的 c(即 b + 1
位置)所能产生的新nums[d] - nums[c]
的值存入哈希表(即 从[b + 2, n)
范围内枚举 d),最后通过枚举 a 来统计答案
代码
class Solution {
public int countQuadruplets(int[] nums) {
int n = nums.length, ans = 0;
int[] cnt = new int[10010];
for (int b = n - 3; b >= 1; b--) {
for (int d = b + 2; d < n; d++) cnt[nums[d] - nums[b + 1] + 200]++;
for (int a = 0; a < b; a++) ans += cnt[nums[a] + nums[b] + 200];
}
return ans;
}
}