Make Two Arrays Equal by Reversing Subarrays

EasyArrayHash TableSorting

Solution

class Counter extends Map<number, number> {
  constructor(arr: number[] = []) {
    super();
    arr.forEach((num) => {
      this.add(num);
    });
  }
  get(key: number): number {
    return super.get(key) ?? 0;
  }
 
  add(key: number): void {
    super.set(key, this.get(key) + 1);
  }
 
  sub(key: number): void {
    super.set(key, this.get(key) - 1);
  }
}
 
export function canBeEqual(target: number[], arr: number[]): boolean {
  const counter = new Counter(target);
  for (const num of arr) {
    const count = counter.get(num);
    counter.sub(num);
    if (count === 0) {
      return false;
    }
  }
  return true;
}