文章目录
一、题目描述
题目链接
1、题目描述
给你一个下标从 0 开始长度为 n 的整数数组 nums 。
下标 i 处的 平均差 指的是 nums 中 前 i + 1 个元素平均值和 后 n - i - 1 个元素平均值的 绝对差 。两个平均值都需要 向下取整 到最近的整数。
请你返回产生 最小平均差 的下标。如果有多个下标最小平均差相等,请你返回 最小 的一个下标。
如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。
注意:
- 两个数的 绝对差 是两者差的绝对值。
- n 个元素的平均值是 n 个元素之 和 除以(整数除法) n 。
- 0 个元素的平均值视为 0 。
示例 1:
示例 2:
二、解题思路
先求出数组的前缀和,再根据题目模拟即可。
三、代码
const int N = 100010;
long long s[N];
class Solution {
public:
int minimumAverageDifference(vector<int>& nums) {
long long ans = -1, res = 1e9;
int n = nums.size();
if(n == 1) return 0;
for(int i = 1; i <= n; i++) {
s[i] = s[i - 1] + nums[i - 1];
}
for(int i = 1; i <= n; i++) {
int avg;
if(i == n) {
avg = abs((s[i] / i) - 0);
}
else {
avg = abs((s[i] / i) - (s[n] - s[i]) / (n - i));
}
if(res > avg) {
ans = i - 1;
res = avg;
}
}
return ans;
}
};