Count Special Quadruplets

EasyArrayHash TableEnumeration

Solution

class Counter {
  map: Map<number, number>;
 
  constructor(arr: number[] = []) {
    this.map = new Map();
    arr.forEach((v) => {
      this.add(v);
    });
  }
 
  get(key: number) {
    return this.map.get(key) ?? 0;
  }
 
  add(key: number) {
    return this.map.set(key, this.get(key) + 1);
  }
}
 
export function countQuadruplets(nums: number[]): number {
  const n = nums.length;
  const counter = new Counter([nums[n - 1] - nums[n - 2]]);
 
  let answer = 0;
  for (let i = n - 3; 1 <= i; i--) {
    for (let j = i - 1; 0 <= j; j--) {
      answer += counter.get(nums[i] + nums[j]);
    }
 
    for (let k = n - 1; i < k; k--) {
      counter.add(nums[k] - nums[i]);
    }
  }
 
  return answer;
}