當元素範圍為 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

更新於:2020年6月3日

145 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告