题目

类型:数组
image.png

解题思路

根据等式关系进行移项可得: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 来统计答案

代码

  1. class Solution {
  2. public int countQuadruplets(int[] nums) {
  3. int n = nums.length, ans = 0;
  4. int[] cnt = new int[10010];
  5. for (int b = n - 3; b >= 1; b--) {
  6. for (int d = b + 2; d < n; d++) cnt[nums[d] - nums[b + 1] + 200]++;
  7. for (int a = 0; a < b; a++) ans += cnt[nums[a] + nums[b] + 200];
  8. }
  9. return ans;
  10. }
  11. }