Longest Harmonious Subsequence

EasyArrayHash TableSliding WindowSortingCounting

Solution

class Counter extends Map<number, number> {
  get(key: number, defaultValue = 0) {
    return super.get(key) ?? defaultValue;
  }
 
  add(key: number) {
    return this.set(key, this.get(key) + 1);
  }
}
 
export function findLHS(nums: number[]): number {
  const counter = new Counter();
  for (const num of nums) {
    counter.add(num);
  }
 
  let answer = 0;
  for (const num of counter.keys()) {
    const maxOtherCount = Math.max(counter.get(num - 1), counter.get(num + 1));
    if (0 < maxOtherCount) {
      answer = Math.max(answer, counter.get(num) + maxOtherCount);
    }
  }
  return answer;
}