给你一个下标从 0 开始长度为 n 的整数数组 nums 。
下标 i 处的 平均差 指的是 nums 中 前 i + 1 个元素平均值和 后 n - i - 1 个元素平均值的 绝对差 。两个平均值都需要 向下取整 到最近的整数。
请你返回产生 最小平均差 的下标。如果有多个下标最小平均差相等,请你返回 最小 的一个下标。
注意:
两个数的 绝对差 是两者差的绝对值。
n 个元素的平均值是 n 个元素之 和 除以(整数除法) n 。
0 个元素的平均值视为 0 。
示例 1:
输入:nums = [2,5,3,9,5,3]
输出:3
解释:
输入:nums = [0]
输出:0
解释:
唯一的下标是 0 ,所以我们返回 0 。
下标 0 处的平均差为:|0 / 1 - 0| = |0 - 0| = 0 。
提示:
1 <= nums.length <= 10^5
0 <= nums[i] <= 10^5
class Solution {
public int minimumAverageDifference(int[] nums) {
int n = nums.length, res = 0;
long min = Integer.MAX_VALUE;
long[] sum = new long[n + 1];
for (int i = 0; i < n; i++) {
sum[i + 1] = sum[i] + nums[i];
}
for (int i = 0; i < n; i++) {
long diff = Math.abs(sum[i + 1] / (i + 1) - ((n - i - 1 == 0) ? 0 : (sum[n] - sum[i + 1]) / (n - i - 1)));
if (diff < min) {
res = i;
min = diff;
}
}
return res;
}
}