Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts

MediumArrayGreedySorting

Solution

export function maxArea(
  h: number,
  w: number,
  horizontalCuts: number[],
  verticalCuts: number[],
): number {
  const MOD = BigInt(10 ** 9 + 7);
  horizontalCuts.sort((a, b) => a - b);
  verticalCuts.sort((a, b) => a - b);
 
  const getMaxBetweenArea = (
    [maxBetweenArea, prev]: [number, number],
    curr: number,
  ): [number, number] => {
    return [Math.max(maxBetweenArea, curr - prev), curr];
  };
 
  const [maxHorizontalBetweenArea] = [...horizontalCuts, h].reduce(getMaxBetweenArea, [0, 0]);
  const [maxVerticalBetweenArea] = [...verticalCuts, w].reduce(getMaxBetweenArea, [0, 0]);
 
  return Number((BigInt(maxHorizontalBetweenArea) * BigInt(maxVerticalBetweenArea)) % MOD);
}