当元素范围为 1 到 n 时,在 C++ 中 |arr[0] – arr[1]| + |arr[1] – arr[2]| + … + |arr[n – 2] – arr[n – 1]| 的最大值
在这个问题中,我们得到一个包含 n 个整数的数组,其范围为 [1, n]。我们的任务是创建一个程序,查找 |arr[0] – arr[1]| + |arr[1] – arr[2]| + … + |arr[n – 2] – arr[n – 1]| 的最大值。
让我们举个例子来理解这个问题:
输入 − array= {1, 2, 3}
输出 − 3
解释 −
max sum is |1-3|+|2-1| = 3
解决这个问题的一个简单方法是创建数组的所有排列,并找到所有排列值中的最大值。一个更有效的方法是概括所有 n 值的最大值,然后创建一个通用公式。
所以:
Maximum sum for (n = 1) = 0 Maximum sum for (n = 2) = 1 Maximum sum for (n = 3) = 3 Maximum sum for (n = 4) = 7 Maximum sum for (n = 5) = 11 So, the maximum value is 0, 1, 3, 7, 11…
通用公式是:((n*n/2)-1)
示例
程序演示了我们解决方案的工作原理:
#include <iostream> using namespace std; int maxAbsVal(int n) { if (n == 1) return 0; return ((n*n/2) - 1); } int main() { int n = 4; cout<<"The maximum sum of absolute difference is "<<maxAbsVal(n); return 0; }
输出
The maximum sum of absolute difference is 7
广告