C++ 代码查找最小算术平均偏差


假设我们有一个包含 3 个元素的数组 A。如果 A[0] + A[2] = 2 * A[1],则 A[1] 是两个元素 A[0] 和 A[3] 的算术平均值。三个数字 d(A[0], A[1], A[2]) 的算术平均值偏差为 |A[0] + A[2] - 2*A[1]|。我们可以执行以下操作任意次:从索引 {0, 1, 2} 中选择两个索引 i 和 j,使得 i != j,然后将 A[i] 加 1 并将 A[j] 减 1。我们必须找到算术平均偏差的最小值。

所以,如果输入类似于 A = [2, 2, 6],那么输出将是 1,因为如果我们减少 A[0] 并增加 A[1],则数组将变为 [1, 3, 6],因此平均偏差将为 |1 + 6 - 2 * 3| = 1。

步骤

为了解决这个问题,我们将遵循以下步骤:

a := A[0]
b := A[1]
c := A[2]
return minimum of 1 and (((a + c - 2 * b) mod 3 + 3) mod 3)

示例

让我们看看以下实现以获得更好的理解:

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A){
   int a = A[0];
   int b = A[1];
   int c = A[2];
   return min(1, ((a + c - 2 * b) % 3 + 3) % 3);
}
int main(){
   vector<int> A = { 2, 2, 6 };
   cout << solve(A) << endl;
}

输入

{ 2, 2, 6 }

输出

1

更新日期: 2022-03-11

199 次浏览

开启你的 职业生涯

完成课程以获得认证

入门
广告