Back to all solutions

#2256 - Minimum Average Difference

Problem Description

You are given a 0-indexed integer array nums of length n.

The average difference of the index i is the absolute difference between the average of the first i + 1 elements of nums and the average of the last n - i - 1 elements. Both averages should be rounded down to the nearest integer.

Return the index with the minimum average difference. If there are multiple such indices, return the smallest one.

Note:

  • The absolute difference of two numbers is the absolute value of their difference.
  • The average of n elements is the sum of the n elements divided (integer division) by n.
  • The average of 0 elements is considered to be 0.

Solution

/**
 * @param {number[]} nums
 * @return {number}
 */
var minimumAverageDifference = function(nums) {
  const n = nums.length;
  let leftSum = 0;
  let rightSum = nums.reduce((sum, num) => sum + num, 0);
  let minDiff = Infinity;
  let result = 0;

  for (let i = 0; i < n; i++) {
    leftSum += nums[i];
    rightSum -= nums[i];
    const leftAvg = Math.floor(leftSum / (i + 1));
    const rightAvg = i === n - 1 ? 0 : Math.floor(rightSum / (n - i - 1));
    const diff = Math.abs(leftAvg - rightAvg);

    if (diff < minDiff) {
      minDiff = diff;
      result = i;
    }
  }

  return result;
};