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
广告