0
点赞
收藏
分享

微信扫一扫

LeetCode 6052. 最小平均差

木匠0819 2022-04-30 阅读 64

文章目录

一、题目描述

题目链接
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;
    }
};
举报

相关推荐

0 条评论