C++ 中陣列值三角形排列的最大高度


問題陳述

給定一個數組,我們需要從中查詢我們可由陣列值形成的三角形的最大高度,使得每個 (i+1)th 級別的元素和大於前一級的元素和。

示例

如果輸入陣列為 {40, 100, 20, 30 },那麼答案為 2,如下所示 −

底層可以有 100 和 20,金字塔的上層可以有 40 或 30

演算法

我們的解決方案只依賴於以下邏輯:如果我們的金字塔可能的最大高度為 h,那麼陣列中必須存在 ( h * (h + 1) ) / 2 個元素

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int getMaximumHeight(int *arr, int n) {
   int result = 1;
   for (int i = 1; i <= n; ++i) {
      long long y = (i * (i + 1)) / 2;
      if (y < n) {
         result = i;
      } else {
         break;
      }
   }
   return result;
}
int main() {
   int arr[] = {40, 100, 20, 30};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Result = " << getMaximumHeight(arr, n) << endl;
   return 0;
}

輸出

編譯並執行上述程式時,將生成以下輸出 −

Result = 2

更新日期:10-Jan-2020

82 次瀏覽

職業生涯強勢啟動

完成課程獲得認證

開始學習
廣告
© . All rights reserved.