2256. Minimum Average Difference
T: O(n)
S: O(1)
```java
class Solution {
    public int minimumAverageDifference(int[] nums) {
        long total = 0;
        for (int num : nums) {
            total += num;
        }
        
        int n = nums.length;
        long result = Integer.MAX_VALUE;
        int resultIdx = -1;
        
        long prefixSum = 0;
        long preCount = 0;
        for (int i = 0 ; i < n; i++) {
            prefixSum += nums[i];
            preCount++;
        
            long preAvg = (prefixSum/preCount);
            long postAvg = n - preCount == 0 ? 0 : (total - prefixSum)/(n - preCount);
            long avgDiff = Math.abs(preAvg - postAvg);
            if (result > avgDiff) {
                result = avgDiff;
                resultIdx = i;
            }
        }
        return resultIdx;
    }
}
/**
i
  i+1    n-i-1
abs(diff)
avg(first i+1 elements)
avg(last n - i - 1)
i = 1
0 1 2
first i+1 ->  first 2
  0 1 2
  [ ]
last (3 - 1 - 1 = 1) -> last 1
 0 1 2
     []
rounded down means 
2.9 -> 2
2.4 -> 2
2.5 -> 2
find the index for min avg diff 
ps = prefix sum of i
last_ps = sum - ps
ps / (0 to i) = ps / i+1
last_ps / n - i - 1
Min(Math.abs(ps - last_ps))
 */
```Last updated
Was this helpful?