class Solution {
public:
int minimumAverageDifference(vector<int>& nums){
// abs: 最小平均差对应的下标
// minVal: 当前最小平均差
int ans = nums.size(), minVal = INT32_MAX;
// left: 小于等于当前下标的所有元素值之和
// right: 大于当前下标的所有元素值之和
long long left = 0, right = 0;
for(int i = 0; i < nums.size(); i++){
right += nums[i];
}
// 移动下标,分别计算当前下标位置的 minVal
for(int i = 0; i < nums.size(); i++){
left += nums[i];
right -= nums[i];
// 当前位置的平均差
int cal = 0;
if(nums.size() != i + 1){
cal = (left / (i + 1)) - (right / (nums.size() - i - 1));
}else{
// 如果是数中中的最后一个元素,则right 为0
cal = (left / (i + 1));
}
// 获取绝对值
cal = abs(cal);
if(minVal > cal){
// 如果当前的最小平均差为0,则直接返回
if(0 == (minVal = cal)){
return i;
}
// 记录当前最小平均差的位置
ans = i;
}
}
return ans;
}
};
2256. 最小平均差、数字计算
最新推荐文章于 2024-07-19 19:25:43 发布