Minimum Average Difference

MediumArrayPrefix Sum

Solution

import { range } from '@algorithm/lib';
 
export function minimumAverageDifference(nums: number[]): number {
  const average = (total: number, length: number) => {
    return length === 0 ? 0 : Math.floor(total / length);
  };
 
  const n = nums.length;
  const totalSum = nums.reduce((prev, curr) => prev + curr, 0);
 
  let answer = 0;
  let minAvgDiff = Number.MAX_SAFE_INTEGER;
  let currPrefixSum = 0;
  for (const i of range(n)) {
    currPrefixSum += nums[i];
    const leftAverage = average(currPrefixSum, i + 1);
    const rightAverage = average(totalSum - currPrefixSum, n - 1 - i);
    const avgDiff = Math.abs(leftAverage - rightAverage);
 
    if (avgDiff < minAvgDiff) {
      minAvgDiff = avgDiff;
      answer = i;
    }
  }
 
  return answer;
}